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

问题描述 投票:0回答:2

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

   void foo(uint_32 x)
   {
       static uint_32 y = x;
       ...
   }
c static expression const
2个回答
5
投票

对于你的目的,你可能想要这样。

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

你想做的是一个初始化。上面所做的是一个赋值。


也许对于你的目的来说,这样做会更有趣。

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

现在这个变量 y 可以很容易地被调试器访问,一旦发现了 foo 功能完成。


4
投票

"为什么以下是一个非法的常量表达式?"

因为 static 变量必须用一个在编译时已知的值来初始化。x 只在运行时确定。


请注意,这种使用 static 是为了在不同的调用中保持变量的存储值。foo() alive (existing in memory) - 意味着对象不会在一次函数执行后被销毁deallocated,就像存储类的函数局部变量一样。automatic。

创建和初始化一个新的系统是没有意义的。static 变量的初始化。


0
投票

一个用静态存储指定符声明的变量必须用一个常量初始化。

例如,在调用new函数时,用静态存储指定符声明的变量必须用常量初始化。

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

OR

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

0
投票

回答你问题的另一个方法是提醒你使用的是C,而不是C++。同样的表达式在C++中是完全有效的,在C++中,静态变量的初始值可能不是一个常量。

© www.soinside.com 2019 - 2024. All rights reserved.