gcc/g 是否会生成if(false)语句的主体
Does gcc/g++ generate the body of an if(false) statement?
在C 中,想象一下我的功能
bool Aclass::func(){
return true;
}
以这种方式在主机中称为
if(!func()) {
//do stuff
}
编译器是否生成这些代码行?
像所有优化问题一样,它取决于编译器和给定的标志。话虽如此,如果提供了优化标志,则可以删除像这样的现代编译器。尝试https://godbolt.org/亲自查看哪个编译器和哪个标志将成功删除死亡代码。
编译步骤的编译器将把这些代码视为有效。例如,如果您在这些代码行中有错误,则编译器将标记它。因此,例如,以下内容不会编译
if (false) {
auto s = std::string{1.0};
}
,但是大多数优化器不会在该源文件的编译表格中添加该代码。但是,如果需要,仍然会添加相关的代码,例如
if (true) { ... }
else { ... }
在这里,其他语句的其他代码本质上将转换为
{
...
}
当代码转换为编译表格时。
@yakk提出了一个很好的观点。不包括此类代码的编译器称为"消除代码"。但是,标签仍然可以用于达到车身代码。
还要注意,在这些情况下,在编译时评估表达式。然后,您可以使用if constexpr
的C 17中的新结构。但是,正如我提到的编译器错误,即使在运行时 if
中的死亡代码中仍然存在,if constexpr
s的情况有所不同,有关更多读取代码示例此处http://en.cppreference.com/w/cpp/language/language/if#conconstexppr_if_if此答案https://stackoverflow.com/a/38317834/5501675
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 伪造事实↔false
- QueryWorkingSet总是返回false
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- if 语句在条件为真时返回 false
- gcc/g 是否会生成if(false)语句的主体
- 为什么 if 语句对于运算符重载函数计算 false
- 如果语句计算结果为 false,即使条件为真
- 为什么如果条件为false,为什么仍会对语句进行辩护
- 编译器之间在丢弃的 if constexpr(false) 语句中实例化模板的行为不一致
- 如果某个条件语句中的某些内容导致该条件语句不再为true/false,则该语句是否停止执行
- 如果语句不求值为false?程序给出奇怪的输出.为什么