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)
“为什么下面的常量表达式是非法的? ”
因为static变量必须用编译时已知的值初始化,而x仅在运行时确定。
请注意,这种使用static是为了在不同的调用之间保持变量及其存储的值foo()(存在于内存中) - 意味着在一次执行函数后对象不会被销毁/释放,因为它是这种情况带有存储类automatic 的函数局部变量。
static在每个函数调用 new 时创建和初始化一个变量是没有意义的。
为了您的目的,您可能想要这样:
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函数完成,调试器就可以轻松访问该变量。