为什么这是一个非法的常量表达式?

Pis*_*ic 4 c static expression constants storage-class-specifier

我试图保留一个变量,以便在调试优化代码时可以看到它的值。为什么以下是非法的常量表达式?

   void foo(uint_32 x)
   {
       static uint_32 y = x;
       ...
   }
Run Code Online (Sandbox Code Playgroud)

Rob*_*rtS 5

为什么下面的常量表达式是非法的?

因为static变量必须用编译时已知的值初始化,而x仅在运行时确定。


请注意,这种使用static是为了在不同的调用之间保持变量及其存储的值foo()(存在于内存中) - 意味着在一次执行函数后对象不会被销毁/释放,因为它是这种情况带有存储类automatic 的函数局部变量。

static在每个函数调用 new 时创建和初始化一个变量是没有意义的。


Jab*_*cky 5

为了您的目的,您可能想要这样:

void foo(uint_32 x)
{
    static uint_32 y;
    y = x;
    ...
}
Run Code Online (Sandbox Code Playgroud)

您尝试做的是初始化。上面做的是一个任务。


也许为了你的目的,这会更有趣:

static uint_32 y;
void foo(uint_32 x)
{
    y = x;
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,y一旦foo函数完成,调试器就可以轻松访问该变量。

  • 此代码相当于使用非静态变量“y” (2认同)