搞不明白,为什么有时候在switch中定义变量没有问题,有时候又会报错。

  刚刚又报了一个:1540-0246 (S) The "case" statement bypasses the initialization of "CString sRoamAreaCode".


  这种不清楚的状况终于因为刚刚的一时兴起,google了下下~~


  原来只是加不加括号的区别。

  因为C++中变量的作用域是相邻的两个大括号,假设下面的例子:

  int nChoose; 

  switch(nChoose)

{

  case 1:

   int i = 1;

  break;

  case 2:

  break;

  default:

   break;

}

i的作用域是switch的两个大括号,这样如果nChoose的值是2的话,就会跳过i的声明 定义语句,出错是必然的。

所以,只要加个大括号,就什么问题都解决啦

int nChoose; 

  switch(nChoose)

{

  case 1:

{

   int i = 1;

}

  break;

  case 2:

  break;

  default:

   break;

}