跳入 if(false) 块有什么问题吗?
Is there any problem in jumping into if(false) block?
我已经读过几次(例如这里 ),任何体面的 c++ 编译器都会选择退出
if(false)
{
...
}
但是,如果有意跳入此 if(false)
块怎么办。我有这样的想法
#include <iostream>
void func(int part){
switch (part) {
case 0:{
if(false)
case 1:{std::cout << "hello" << std::endl;}
break;
}
default:
break;
}
}
int main()
{
func(0);
func(1);
return 0;
}
是否有任何体面的 c++ 编译器会尊重跳转,或者最终会出现选择退出的问题吗?
该代码似乎不是未定义行为。因此,不允许任何优化产生任何会影响代码行为的效果。
注意:与此种类 代码相关,您不能做的一件事是"goto" 过度定义局部变量。但是这段代码不会那样做,所以没问题。
另一个注意事项:如果您在 "real"(不是玩具、实验、混淆练习等)程序中有这种代码,您真的应该将其重构为不会引起太多 WTF 的东西来自任何阅读代码的人。
我已经读过几次(例如这里
if(false)
{
...
}
但是,如果有意跳入此 if(false)
块怎么办。我有这样的想法
#include <iostream>
void func(int part){
switch (part) {
case 0:{
if(false)
case 1:{std::cout << "hello" << std::endl;}
break;
}
default:
break;
}
}
int main()
{
func(0);
func(1);
return 0;
}
是否有任何体面的 c++ 编译器会尊重跳转,或者最终会出现选择退出的问题吗?
该代码似乎不是未定义行为。因此,不允许任何优化产生任何会影响代码行为的效果。
注意:与此种类 代码相关,您不能做的一件事是"goto" 过度定义局部变量。但是这段代码不会那样做,所以没问题。
另一个注意事项:如果您在 "real"(不是玩具、实验、混淆练习等)程序中有这种代码,您真的应该将其重构为不会引起太多 WTF 的东西来自任何阅读代码的人。