ben karıştı neden şu işleri:C de değişken için extern ihmal, ama hala çalışır?
test.c
#include <stdio.h>
int g;
// ??? should be extern int g; ???
int main(){
printf("%i\n", g);
return 0;
}
lib.c
int g = 3;
Neden derleme üzerine yinelenen sembol hata alamıyorum? C++ 'da bunu yapmaya çalışırken hata alıyorum, bu da beni tatmin ediyor. Ancak, bu örnekte, her şey extern'i dahil edip etmediğimi (yani başarılı bir şekilde 3 basar) derler ve çalışır. C'deki extern hakkında StackOverflow hakkındaki diğer tüm soruları okumaktan herkes, bir değişkende kullanılan extern'in değişkeni tanımladığını, ancak bunun için tanımladığı (yani bellek ayırma) olduğunu söyler. Ama burada, eğer extern kullanmazsam, o zaman her ikisi de g olarak adlandırılan iki ayrı değişken tanımlıyorum, bu yüzden bir çeşit yinelenen sembol hatası olmalı. Ama yok, o yüzden kafam çok karıştı.
'lib.c: Sonuç olarak, "test.c" olarak
g
değeri de 3.See başlangıca getirilir "lib.c", içinde
g
değinmektedir '? – CarcigenicateNasıl derlersiniz? –
Bu garip C (ama C++ değil) şeyler. Buraya bakın: http://stackoverflow.com/questions/3095861/about-tentative-definition veya burada: http://ninjalj.blogspot.ch/2011/10/tentative-definitions-in-c.html –