跳转到if(false)块有问题吗

Is there any problem in jumping into if(false) block?

本文关键字:有问题 false if      更新时间:2023-10-16

我已经读过几次了(例如这里的编译器:如果条件总是真/假怎么办(,任何像样的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++编译器会尊重这种跳跃,或者最终选择退出会有一些问题?

代码似乎不是Undefined Behavior。因此,任何优化都不允许产生任何会影响代码行为的效果。

注意:与这种类型的代码相关,有一件事是不允许您对局部变量的定义进行"goto"。但这段代码不能做到这一点,所以没问题。

另一个注意事项是:如果你在一个"真实"(而不是玩具、实验、混淆练习等(程序中有这种代码,你真的应该把它重构成一个不会从任何阅读代码的人那里引发太多WTF的东西。