gpt4 book ai didi

c++ - 编译器 : What if condition is always true/false

转载 作者:IT老高 更新时间:2023-10-28 23:18:41 27 4
gpt4 key购买 nike

我考虑条件和编译器。我正在为 Arduino 编写一个应用程序,因此我需要该应用程序尽可能快。

在我的代码中我有这个:

#define DEBUG false    

...

if (DEBUG)
{
String pinName;
pinName = "Pin ";
pinName += pin;
pinName += " initialized";
Serial.println(pinName);
}

我想知道编译器是否不包含二进制文件中的代码(if block 中的代码)。条件总是假的,所以程序永远不会去那里。

从另一边。如果 DEBUG 为真怎么办? Arduino是测试条件还是编译器只在二进制文件中包含if的主体?

我找到了这个网站 https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html关于#if 指令,所以我可以重写代码以使用这些指令而不是“正常”if。但是我想知道我是否应该重写它,否则会浪费时间。

最佳答案

如果它可以在编译时告诉条件始终评估为假,那么任何半体面的优化编译器都会删除 if 语句中的整个代码。同样,如果条件始终为真,任何半体面的编译器都会跳过检查本身。

实际上这完全等同于“编译器开关”,例如:

#define DEBUG


#ifdef DEBUG
...
#endif

#ifdef 的“编译器切换”语法是首选,因为它使其他 C 程序员的意图更清楚。但这只是编码风格的问题 - 它会产生与原始代码相同的二进制文件。

关于c++ - 编译器 : What if condition is always true/false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com