miałem ten kod:Dlaczego nie mogę zainicjować zmiennej statycznej z wartością inną niż literalna?
int foo(void){
return 1;
}
int main(void){
static const int x = foo();
//do stuff
return 0;
}
Ale mam błąd o inicjowanie zmienną statyczną o wartości const. Myślałem, że to ma coś wspólnego ze specyfikatorem const, ale tak się nie stało. Skończyło upuszczenie słowa kluczowego const i robi to:
int foo(void){
return 1;
}
int main(void){
static int x = 0;
if (x == 0) x = foo();
//do stuff
return 0;
}
Teraz, dlaczego nie można kompilator tylko opóźnić inicjalizacji zmiennej static int x
dopóki nie jest używany, a co ważniejsze, dlaczego nie można po prostu umieścić go w sekcja do odczytu i zapisu, i po prostu wymusić, że nie jest ona zapisana podczas kompilacji? Chciałbym użyć słowa kluczowego const
i static
dla poprawy semantyki w moim kodzie, ale nie bardzo zależy mi na tym, jak kompilator sobie z tym poradzi, niech to zadziała.
Czy moje rozumienie standardu C jest nieprawidłowe? Czy mój kompilator może ssać? To jest MSVC 9.0.
Co to jest zmienna statyczna w dobru głównym? – tchap
"x" wygląda jak zmienna lokalna w kontekście twojego przykładu. Dlaczego chcesz, żeby to było statyczne? –
@ValAkkapeddi: Często ze względu na to, że nie potrzebujesz/chcesz reinicjalizować go dla każdego połączenia z tą funkcją. –