C++ 用标签前写的代码切换,可以吗?

C++ 用标签前写的代码切换,可以吗?,c++,switch-statement,C++,Switch Statement,我想知道是否所有编译器都会像VS2005一样,在switch语句中的标签之前默默地忽略代码 以下是我想要的: #define CASE break; case 所以 会变成 switch (i) { break; case 0: print("0"); break; case 1: print("1"); } 从标准来看,第一个“break”(以及任何其他代码,如果它存在的话)似乎不会被执行。该标准并不否认此类代码的存在,但我不能确定实际编译器的情况。是的,这在§6.4.2

我想知道是否所有编译器都会像VS2005一样,在switch语句中的标签之前默默地忽略代码

以下是我想要的:

#define CASE break; case
所以

会变成

switch (i) {
  break;
  case 0:  print("0");  break;
  case 1:  print("1");
}

从标准来看,第一个“break”(以及任何其他代码,如果它存在的话)似乎不会被执行。该标准并不否认此类代码的存在,但我不能确定实际编译器的情况。

是的,这在§6.4.2¨5(特别是忽略部分)中有所暗示:

执行switch语句时,将计算其条件并与每个case常量进行比较。如果 其中一个case常量等于条件的值,则控制传递给以下语句 匹配的案例标签。如果没有与条件匹配的case常量,并且存在默认标签,则控制 传递到由默认标签标记的语句。如果没有大小写匹配,并且没有默认值,则 开关中的任何语句都不会执行


但是,我认为你的宏不是一个好主意。

就我个人而言,我将“无法”编写这样的代码,因为所有警告都会变成错误,并且可能会出现无法访问的代码警告。。。事实上,对clang++的快速测试会输出这样一个警告。

看起来有点肮脏,因为它会导致开关断开。。。好问题+1讨厌的,讨厌的代码!你做完后别把它传给我。(但创造性+1)非常好地实现了一个非常糟糕的想法。
switch (i) {
  break;
  case 0:  print("0");  break;
  case 1:  print("1");
}