2013-06-30 15 views
9

Ich habe zwei globale Variablen mit dem gleichen Namen in C deklariert. Es sollte einen Fehler geben, da wir Variablen gleichen Namens nicht in derselben Speicherklasse deklarieren können.Deklaration von zwei globalen Variablen mit gleichem Namen in C

Ich habe es in C++ überprüft - es gibt einen Kompilierungsfehler, aber nicht in C. Warum?

Es folgt der Code:

int a; 
int a = 25; 
int main() 
{ 

    return 0; 
} 
es

Schauen Sie sich an: Code Written at Ideone

ich denke, das wahrscheinlich der Grund ist

Declaration and Definition in C

Aber das ist nicht der Fall in C++ . Ich denke in C++, ob die Variable im globalen Bereich deklariert wird oder im automatischen Bereich die Deklaration und Definition zur gleichen Zeit stattfindet.

Könnte jemand mehr Licht darauf werfen.

Wenn ich jetzt die Variable zwei Mal definiere und den Wert zweimal gebe, gibt es den Fehler (anstelle einer Deklaration und einer Definition).

-Code an: Two definitions now

int a; 
int a; 
int a; 
int a = 25; 

int main() 
{ 
return 0; 
} 
+0

@ H2CO3 .. danke für Ihren Vorschlag, aber ich habe nur versucht zu verstehen, was darin vorging. Aber es gibt eine Situation, in der Sie nicht einmal die Verwendung der globalen Variablen vermeiden können. –

Antwort

8

In C, mehrere globale Variablen "verschmolzen" in einem. Sie haben also tatsächlich nur eine globale Variable, mehrfach deklariert. Dies geht auf eine Zeit zurück, als extern in C nicht benötigt wurde (oder möglicherweise nicht existierte - nicht ganz sicher).

Mit anderen Worten, das ist in C aus historischen Gründen gültig, damit wir noch Code kompilieren können geschrieben, bevor es einen ANSI-Standard für C. gab

Um den Code in C++ zu verwenden, würde ich vorschlagen, es zu vermeiden.

+0

Ich konnte nicht die Anweisung "Mehrere globale Variablen sind" in eine zusammengeführt. Ich habe jetzt auch die erste definiert ,, und jetzt gibt es Kompilierzeit Fehler. –

+1

Mit anderen Worten, alle globalen Variablen mit dem gleichen Namen umgewandelt werden, um eine Variable zu sein - so beziehen sich Ihre 'int a;' und 'int a = 25;' auf das gleiche 'int'-große Stück Speicher. –

+0

Formal als * vorläufige Definition * in C bezeichnet. Sie können vorläufig definiere ein Objekt so oft wie du willst in einer Übersetzungseinheit und sie werden "zusammengeführt" und der resultierende Typ ist die Zusammensetzung aller vorläufigen Definitionen. In deinem Fall ist es nur "int". –

Verwandte Themen