我试图保留一个变量,以便在调试优化代码时可以看到它的值。为什么以下是一个非法的常量表达式?
void foo(uint_32 x)
{
static uint_32 y = x;
...
}
对于你的目的,你可能想要这样。
void foo(uint_32 x)
{
static uint_32 y;
y = x;
...
}
你想做的是一个初始化。上面所做的是一个赋值。
也许对于你的目的来说,这样做会更有趣。
static uint_32 y;
void foo(uint_32 x)
{
y = x;
...
}
现在这个变量 y
可以很容易地被调试器访问,一旦发现了 foo
功能完成。
"为什么以下是一个非法的常量表达式?"
因为 static
变量必须用一个在编译时已知的值来初始化。x
只在运行时确定。
请注意,这种使用 static
是为了在不同的调用中保持变量的存储值。foo()
alive (existing in memory) - 意味着对象不会在一次函数执行后被销毁deallocated,就像存储类的函数局部变量一样。auto
matic。
创建和初始化一个新的系统是没有意义的。static
变量的初始化。
一个用静态存储指定符声明的变量必须用一个常量初始化。
例如,在调用new函数时,用静态存储指定符声明的变量必须用常量初始化。
#define x 5
void foo()
{
static int y = x;
}
OR
void foo()
{
static int y = 5;
}
回答你问题的另一个方法是提醒你使用的是C,而不是C++。同样的表达式在C++中是完全有效的,在C++中,静态变量的初始值可能不是一个常量。