У меня был этот код:
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
AND static
для улучшения семантики в моем коде, но мне все равно, как компилятор справится с этим, просто позвольте ему работать.
Мое понимание стандарта C неверно? Или мой компилятор сосет? Это MSVC 9.0.