У меня был такой код:
int foo(void){
return 1;
}
int main(void){
static const int x = foo();
//do stuff
return 0;
}
Но я получил ошибку об инициализации статической переменной с неконстантным значением. Я думал, что это как-то связано со спецификатором const, но это не так. В конце я отбросил ключевое слово const и сделал следующее:
int foo(void){
return 1;
}
int main(void){
static int x = 0;
if (x == 0) x = foo();
//do stuff
return 0;
}
Теперь, почему компилятор не может просто отложить инициализацию переменной static int x
до тех пор, пока она не будет использована, и, что более важно, почему он не может просто поместите его в раздел для чтения и записи и просто убедитесь, что он не записывается во время компиляции? Я хотел бы использовать ключевое слово const
И static
для улучшения семантики в моем коде, но мне все равно, как компилятор обрабатывает это, просто пусть работает.
Правильно ли я понимаю стандарт C? Или мой компилятор отстой? Это MSVC 9.0.