私はこのコードを持っていた:静的変数をリテラルでない値で初期化できないのはなぜですか?
int foo(void){
return 1;
}
int main(void){
static const int x = foo();
//do stuff
return 0;
}
をしかし、私は非const値と静的変数の初期化に関するエラーを得ました。私はそれがconst指定子と何か関係があると思ったが、それはしなかった。なぜそれだけでそれを置くことができない、なぜコンパイラはただ、もっと重要なことは、使用されるまでstatic int x
変数の初期化を遅らせる、とすることはできません、今
int foo(void){
return 1;
}
int main(void){
static int x = 0;
if (x == 0) x = foo();
//do stuff
return 0;
}
:私は、constキーワードをドロップし、これをやって終了しました読み書きセクションを作成し、コンパイル時には書かれていないことを強制するだけです。私はconst
とstatic
というキーワードを使ってコード内のセマンティクスを改善したいと思っていますが、コンパイラがこれをどのように処理しているかは気にしません。
私のC標準の理解は間違っていますか?または私のコンパイラは吸うのですか?それはMSVC 9.0です。
メイン・グッドの静的変数とは何ですか? – tchap
'x'はあなたの例の文脈でローカル変数のように見えます。なぜこれを静的にしたいのですか? –
@ValAkkapeddi:しばしば、その関数を呼び出すたびに再初期化する必要はありません。 –