我试图保留一个变量,以便在调试优化代码时可以看到它的值。为什么以下是非法的常量表达式?
void foo(uint_32 x)
{
static uint_32 y = x;
...
}
我试图保留一个变量,以便在调试优化代码时可以看到它的值。为什么以下是非法的常量表达式?
void foo(uint_32 x)
{
static uint_32 y = x;
...
}
“为什么下面的常量表达式是非法的? ”
因为static
变量必须用编译时已知的值初始化,而x
仅在运行时确定。
请注意,这种使用static
是为了在不同的foo()
alive调用(存在于内存中)之间保持变量及其存储的值 - 意味着在一次执行函数后对象不会被销毁/释放,因为它就是这种情况带有存储类auto
matic 的函数局部变量。
static
在每个函数调用 new 时创建和初始化变量是没有意义的。
出于您的目的,您可能想要这个:
void foo(uint_32 x)
{
static uint_32 y;
y = x;
...
}
您尝试做的是初始化。上面所做的是一个作业。
也许出于您的目的,这会更有趣:
static uint_32 y;
void foo(uint_32 x)
{
y = x;
...
}
现在,一旦函数完成y
,调试器就可以轻松访问该变量。foo
使用静态存储说明符声明的变量必须使用常量值初始化。
例如:
#define x 5
void foo()
{
static int y = x;
}
或者
void foo()
{
static int y = 5;
}
Another way to answer your question is to remind that you are using C, not C++. The same expression is fully valid in C++ where the initial value for a static variable may not be a constant.