我想到了条件和编译器。我正在为 Arduino 编写一个应用程序,因此我需要该应用程序尽可能快。
在我的代码中我有这个:
#define DEBUG false
...
if (DEBUG)
{
String pinName;
pinName = "Pin ";
pinName += pin;
pinName += " initialized";
Serial.println(pinName);
}
我想知道编译器是否不将代码(if 块中的代码)包含在二进制文件中。条件总是假的,所以程序永远不会去那里。
而从另一边。如果 DEBUG 为真怎么办? Arduino 是否测试条件或编译器仅在二进制文件中包含 if 的主体?
我找到了这个网站https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html关于 #if 指令,因此我可以重写代码以使用这些指令而不是“正常”if。但我想知道我是否应该重写它,或者这是否会浪费时间。
任何半像样的优化编译器都会删除 if 语句内的整个代码,如果它可以在编译时告诉条件始终评估为 false。类似地,如果条件始终为真,任何半正经的编译器都会跳过检查本身。
事实上,这完全等同于“编译器开关”,例如:
#define DEBUG
#ifdef DEBUG
...
#endif
“编译器开关”语法#ifdef
是首选,因为它使其他 C 程序员的意图更清晰。但这只是编码风格的问题 - 它将产生与原始代码相同的二进制文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)