在C中的开关案例中初始化

时间:2013-05-13 15:33:23

标签: c initialization switch-statement

在交换机的特定情况下初始化变量是不好的做法吗?

我有很多变量只与我的一个案例相关,似乎无法找到任何相关信息。

谢谢:)

3 个答案:

答案 0 :(得分:4)

为什么不在相关的情况下声明它们?

switch (something)
{
case 1:
    do_something();
    break;

case 2:
  {
    int x = 12;
    do_something_else(x);
    break;
  }
}

不要错过case 2:中用于创建子范围的花括号。因此,变量x是case 2

的本地变量

答案 1 :(得分:2)

一般来说,我会说如果你的一个案例足够复杂,它需要它自己的变量而不是在其他地方使用,它实际上应该成为它自己的功能。 / p>

答案 2 :(得分:-1)

如果你有这样的事情:

 class X { X() {...} /* and other stuff */ };

 switch(a)
 {
    case 1:
       X x;
       ... using x here .. 
       break;
    case 2:
       ... 
       break; 
  .... 
 }

然后x将在switch大括号的末尾被销毁。这不是一个好主意,因为对于1以外的情况,它不会被初始化。 [此示例将无法编译,因为编译器检测到这种情况会发生,并给出错误!]

所以用大括号包装它:

    case 1:
       {
         X x;
         ... using x here .. 
       }
       break;
    case 2:
       ... 
       break; 
  .... 

现在X在break之前被销毁,这很好。

除了这部分,在特定情况下拥有局部变量没有任何问题。事实上,我认为这是一件好事[但也许更好的是写一个小函数!]