c extern undefined reference [yinelenen]

Sep 02 2020

Basit bir hata olduğundan emin olduğum şey için özür dilerim. Ama birkaç saat sonra neyi yanlış yaptığımı anlayamıyorum. Bunun externbir işlevin dışında bildirilmesi ve bir işlev içinde tanımlanması gerektiğini anlıyorum . Ama işe yarayamıyorum.

İşte minimum kod hatam.

extern double d;
int main(void) {
    d = 0;
    return 0;
}
/home/0KzRYK/ccCTD3Lf.o: In function `main':
prog.c:(.text.startup+0x3): undefined reference to `d'
collect2: error: ld returned 1 exit status

Yanıtlar

1 Akim Sep 02 2020 at 20:41

Yorumlarınız için hepinize teşekkür ederim. Benim hatam, extern double ddeğişkeni ile aynı şekilde tanımladığını varsaymaktı double d. Ama görünüşe göre öyle değil.

Bunun dilin sezgisel olmayan bir özelliği olduğunu söyleyebilirim, en azından yeni başlayanlar için (örneğin extern doublebir tanım değil ama static doubleöyledir).

Yorumlarınızı takiben, tam olarak bundan bahseden ilgili bir soru buldum: Neden bir tanım değil de 'extern' kullanarak bir değişken yaratmak?

MikeCAT Sep 02 2020 at 20:26

Anlayışınız yanlış. externBir fonksiyon içinde tanımlanmasına gerek olmayan değişkenler . Ancak bir yerde tanımlanması gerekir (belki başka bir kaynak dosyası).

Misal:

main.c:

extern double d;
int main(void) {
    d = 0;
    return 0;
}

d.c:

double d;

derleme:

gcc -o main main.c d.c