为什么这是一个非法的常量表达式?
Why is this an illegal constant expression?
我正在尝试保留一个变量,以便在调试优化代码时可以看到它的值。
为什么以下是非法常量表达式?
void foo(uint_32 x)
{
static uint_32 y = x;
...
}
"Why is the following an illegal constant expression?"
因为 static
变量必须用编译时已知的值初始化,而 x
仅在 运行 时确定。
请注意,static
的这种用法是为了在对 foo()
的不同调用之间保持变量及其存储值处于活动状态(存在于内存中)- 意味着对象不会被销毁/ 在一次函数执行后释放,因为它是存储的函数局部变量的情况 class auto
matic.
在每个函数调用 new 时创建和初始化一个 static
变量是没有意义的。
为了您的目的,您可能需要这个:
void foo(uint_32 x)
{
static uint_32 y;
y = x;
...
}
您尝试做的是初始化。上面做的是一个assignment。
也许就您的目的而言,这会更有趣:
static uint_32 y;
void foo(uint_32 x)
{
y = x;
...
}
现在,一旦 foo
函数完成,调试器就可以轻松访问变量 y
。
必须使用常量值初始化使用静态存储说明符声明的变量。
例如:
#define x 5
void foo()
{
static int y = x;
}
或
void foo()
{
static int y = 5;
}
另一种回答问题的方法是提醒您使用的是 C,而不是 C++。相同的表达式在 C++ 中完全有效,其中静态变量的初始值可能不是常量。
我正在尝试保留一个变量,以便在调试优化代码时可以看到它的值。 为什么以下是非法常量表达式?
void foo(uint_32 x)
{
static uint_32 y = x;
...
}
"Why is the following an illegal constant expression?"
因为 static
变量必须用编译时已知的值初始化,而 x
仅在 运行 时确定。
请注意,static
的这种用法是为了在对 foo()
的不同调用之间保持变量及其存储值处于活动状态(存在于内存中)- 意味着对象不会被销毁/ 在一次函数执行后释放,因为它是存储的函数局部变量的情况 class auto
matic.
在每个函数调用 new 时创建和初始化一个 static
变量是没有意义的。
为了您的目的,您可能需要这个:
void foo(uint_32 x)
{
static uint_32 y;
y = x;
...
}
您尝试做的是初始化。上面做的是一个assignment。
也许就您的目的而言,这会更有趣:
static uint_32 y;
void foo(uint_32 x)
{
y = x;
...
}
现在,一旦 foo
函数完成,调试器就可以轻松访问变量 y
。
必须使用常量值初始化使用静态存储说明符声明的变量。
例如:
#define x 5
void foo()
{
static int y = x;
}
或
void foo()
{
static int y = 5;
}
另一种回答问题的方法是提醒您使用的是 C,而不是 C++。相同的表达式在 C++ 中完全有效,其中静态变量的初始值可能不是常量。