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

时间:2015-04-24 01:11:29

标签: c static initialization

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

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

case 2: //  error C2360
....

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

我是对的吗?为什么我收到编译错误?

1 个答案:

答案 0 :(得分:0)

根据MSDN page

  

“你不能跳过一个带有初始化器的声明,除非   声明附在一个区块内。“

因此解决问题的方法是:

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

       // ... code that uses p
    }
    break;