c - STATIC 局部变量的初始化是否可以被 'case' 标签跳过?

标签 c static initialization

我正在使用 Visual Studio,但在编译以下代码(简化版)时收到错误 C2360:'p' 的初始化被 'case' 标签跳过:

case 1:
static char*p[] = 
        {
            "000000000",
            "111111111",
            "222222222",
            "333333333",
            "444444444",
        };
...
break;

case 2: //  error C2360
....

据我所知,静态局部变量与全局变量完全相同,只是它仅对声明它的函数可见。这意味着它的初始化早在ma​​in函数还没有开始执行时就已经完成了。因此,在我看来,'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/

相关文章:

c - 在 C 结构数组中,结构初始化为什么?

android - 由: kotlin.UninitializedPropertyAccessException: lateinit property idLeague has not been initialized引起

c - C语言中逐行读取文本文件

C++ - 从类外部调用方法

java - 在 Java 单例中使用静态?

java - 为什么这里是 ExceptionInInitializerError?

c - 本地时间返回空

c - 使用 C 和 stdlib 预取文件

c - 蛮力算法的优化还是替代?

c++ - 知道使用 std::once_flag 而不调用 std::call_once (任务成功完成后设置once_flag)