web-dev-qa-db-ja.com

なぜこれは違法な定数式なのですか?

最適化されたコードのデバッグ中に変数の値を確認できるように、変数を保持しようとしています。なぜ次のような不正な定数式があるのですか?

   void foo(uint_32 x)
   {
       static uint_32 y = x;
       ...
   }
4
Pistanic

質問に答える別の方法は、C++ではなくCを使用していることを思い出させることです。同じ式がC++で完全に有効であり、静的変数の初期値が定数ではない場合があります。

0
Dmitry Kuzminov

静的ストレージ指定子で宣言された変数は、定数値で初期化する必要があります。

例えば:

#define x 5
void foo()
{
    static int y = x;
}

OR

void foo()
{
    static int y = 5;
}
0
Hitokiri