【问题标题】:Is it possible for the initialization of a STATIC local variable to be skipped by 'case' label?“case”标签是否可以跳过 STATIC 局部变量的初始化?
【发布时间】:2015-04-24 01:11:29
【问题描述】:

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

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

case 2: //  error C2360
....

据我所知,STATIC 局部变量与全局变量完全相同,只是它只对声明它的函数可见。这意味着它的初始化在 ma​​in 函数还没有开始执行时就已经完成了。因此,在我看来,'p'的初始化是不可能跳过的。

我说的对吗?为什么我会收到那个编译错误?

【问题讨论】:

    标签: c static initialization


    【解决方案1】:

    据此MSDN page

    "你不能跳过带有初始化器的声明,除非 声明包含在一个块中。”

    所以问题的解决方法是:

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

    【讨论】:

    • 我知道将代码括起来可以抑制错误,并且我可以理解为什么这样做适用于 AUTO 局部变量。我只是不明白为什么 STATIC 局部变量会发生该错误。还是谢谢。
    猜你喜欢
    • 2013-01-18
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2016-09-07
    相关资源
    最近更新 更多