Ich kann nicht verstehen, warum das nicht funktioniert.Reihenfolge der `statischen` Definition und` externen Deklaration` in einer Übersetzungseinheit
extern int i;
int main()
{
printf(" %d ", i);
}
static int i =3;
Auch das funktioniert nicht:
extern int i;
static int i =3;
int main()
{
printf(" %d ", i);
}
Aber wenn static
Variable vor dem extern declaration
definiert ist es funktioniert:
static int i =3;
extern int i;
int main()
{
printf(" %d ", i);
}
Wie ich aus extern int i
verstehen erzählt, dass i
ist Geschenk woanders und hier, wie es aussieht (int i
)
Aber woanders Mittel:
1) Vielleicht, später in der same
Übersetzungseinheit als global variable
.
2) Vielleicht in einigen other
Translationseinheit.
Ich dachte, dass (1)
würde gültig sein, obwohl static int i = 3
hat Umfang i
auf die aktuelle Übersetzungseinheit eingeschränkt, wo es definiert ist.
Ist nicht static int i =3
global
(ich meine zumindest atleast ist es in der Übersetzungseinheit sichtbar) hier, obwohl es den eingeschränkten Umfang zu seiner Übersetzungseinheit hat? Warum kann der Compiler das nicht finden?
Wenn ich kompilieren die ersten beiden Versionen ich die folgende Kompilierung Fehler:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
Ich kann diese Fehlermeldung verstehen. Auch warum beschwert es sich als eine statische declaration
ist es nicht ein definition
auch?
Was genau "funktioniert nicht"? Ist es ein Kompilierungsproblem? Laufzeitproblem? Ich kompiliere Ihren Code mit VS 2010 und es scheint ordnungsgemäß zu funktionieren. – Nbr44
GCC comipler, ich bekomme eine Kompilierzeit Fehler statische Deklaration von ich folgt nicht-statische Deklaration. –