【发布时间】:2012-02-17 22:24:42
【问题描述】:
编译器会删除这个 if 语句吗?
#define DEBUG 0
int main(int argc, char ** argv)
{
if(DEBUG)
{
...
}
return 0;
}
我试图用谷歌搜索这个,并搜索 stackoverflow,但我认为我的搜索词很糟糕,因为我找不到信息。
如果这是优化的,我想读什么来了解优化?
康斯坦丁
【问题讨论】:
-
您总是可以通过要求您的编译器生成其输出的汇编列表来找出自己。
-
取决于您的编译器及其选项,但是是的,它可能会删除整个块。如果它确实添加和删除了您需要的代码,尽管我使用 #ifdef 的条件编译而不是使用 if。
-
这里是gcc's 选项。
-
只要标准允许编译器执行 x 或 y,您总会发现一个编译器执行 x,而另一个编译器执行 y。所以问这种问题总是只能通过“试试看”来回答
-
是的,我注意到不同的反应。堆栈溢出的一个好处(有点尴尬)是,当我问一个问题时,它旁边会弹出“相关”,这通常正是我正在寻找的。这种反应似乎是平常的。
标签: c++ optimization compiler-construction