以这段代码为例:
#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif
假设“大量代码”可能会为生成的可执行文件增加一兆字节。如果 THIS_IS_NOT_DEFINED 确实未定义,那么编译器是否仍会将所有包含的代码写入 .exe?大多数编译器都遵循类似的过程吗?
C 预处理器处理#ifdef。 如果没有定义,那么编译器本身甚至看不到代码,因此它无法进入.exe。
C++ 编译分为多个阶段。 首先,通过展开
#include
、#define
等对代码进行预处理。这在文本级别上起作用,相当于实际修改源代码。
在这种情况下,编译器将优化预处理器
#ifdef
块中的代码,因为当预处理器运行时,它将将该代码从源文件中拼接出来。 换句话说,编译器中实际进行编译和代码生成的部分根本不会看到该部分代码。 就好像不存在一样。
希望这有帮助!