C++ 用标签前写的代码切换,可以吗?
我想知道是否所有编译器都会像VS2005一样,在switch语句中的标签之前默默地忽略代码 以下是我想要的: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
#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");
}