Ich bin wie, warum die folgenden Werke verwirrt:Weglassen von extern für Variable in C, aber funktioniert immer noch?
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;
Warum bin ich nicht ein Duplikat Symbolfehler beim Übersetzen zu bekommen? Ich bekomme den Fehler beim Versuch, dies in C++ zu tun, damit mich das befriedigt. In diesem Beispiel kompiliert und arbeitet alles (d. H. Druckt 3 erfolgreich), ob oder ob nicht extern enthalten ist. Beim Lesen aller anderen Fragen zu StackOverflow über extern in C scheint jeder zu sagen, dass external, das für eine Variable verwendet wird, die Variable deklariert, aber nicht definiert (d. H. Speicher reserviert). Aber hier, wenn ich extern nicht verwende, dann definiere ich zwei separate Variablen, die beide g genannt werden, also sollte es eine Art von doppeltem Symbolfehler geben. Aber da ist es nicht, also bin ich sehr verwirrt.
Sie sind nicht inklusive 'lib.c '? – Carcigenicate
Wie kompilieren/verknüpfen Sie es? –
Es ist seltsam C (aber nicht C++) Zeug. Schau mal hier: http://stackoverflow.com/questions/3095861/about-centative-definition, oder hier: http://ninjalj.blogspot.ch/2011/10/tentative-definitions-in-c.html –