我正在使用 Visual Studio,但在编译以下代码(简化版)时收到错误 C2360:'p' 的初始化被 'case' 标签跳过:
case 1:
static char*p[] =
{
"000000000",
"111111111",
"222222222",
"333333333",
"444444444",
};
...
break;
case 2: // error C2360
....
据我所知,静态局部变量与全局变量完全相同,只是它仅对声明它的函数可见。这意味着它的初始化早在main函数还没有开始执行时就已经完成了。因此,在我看来,'p'的初始化是不可能被跳过的。
我说得对吗?为什么我收到编译错误?
最佳答案
根据这个MSDN page :
"You cannot jump past a declaration with an initializer unless the declaration is enclosed in a block."
所以问题的解决方案是:
case 1:
{
static char*p[] =
{
"000000000",
"111111111",
"222222222",
"333333333",
"444444444",
};
// ... code that uses p
}
break;
关于c - STATIC 局部变量的初始化是否可以被 'case' 标签跳过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837014/