Nie jestem w stanie zrozumieć, dlaczego to nie działa.Porządek "statycznej" definicji i "zewnętrznej deklaracji" w jednostce tłumaczeniowej
extern int i;
int main()
{
printf(" %d ", i);
}
static int i =3;
Również to nie działa:
extern int i;
static int i =3;
int main()
{
printf(" %d ", i);
}
Ale jeśli static
zmienna jest zdefiniowana przed extern declaration
to działa:
static int i =3;
extern int i;
int main()
{
printf(" %d ", i);
}
Jak rozumiem z extern int i
mówi, że jest i
obecny gdzieś indziej i tutaj jak to wygląda (int i
)
Ale gdzieś indziej środki:
1) Może później punkt w jednostce same
translacji jako global variable
.
2) Może, w niektórych jednostkach translacyjnych other
.
Myślałem, że (1)
będzie ważny, mimo że static int i = 3
ograniczył zakres i
do bieżącej jednostki tłumaczeniowej, w której jest zdefiniowany.
Czy nie jest to static int i =3
global
(mam na myśli przynajmniej to, że jest widoczny w jednostce tłumaczeniowej), mimo że ma ograniczony zakres do swojej jednostki tłumaczeniowej? Dlaczego więc kompilator nie może go znaleźć?
Kiedy skompilować dwie pierwsze wersje pojawia się następujący błąd kompilacji czas:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
Jestem w stanie zrozumieć ten komunikat o błędzie. Ponadto, dlaczego narzeka na to jako statyczne declaration
czy nie jest to również definition
?
Co dokładnie "nie działa"? Czy to jest problem z kompilacją? Problem z uruchomieniem? Kompiluję kod za pomocą VS 2010 i wygląda na to, że działa poprawnie. – Nbr44
Kombinator GCC, otrzymuję komunikat o błędzie czasu kompilacji statycznej deklaracji i podąża za deklaracją niestatyczną. –