Visual C ++编译器是否优化了未定义的宏块?

时间:2012-05-15 23:34:35

标签: c++ optimization compiler-construction macros

以此代码为例:

#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif

假设“大量代码”可能会在生成的可执行文件中添加一兆字节。如果确实没有定义THIS_IS_NOT_DEFINED,那么编译器是否仍会将所有包含的代码写入.exe,或者不是?大多数编译器都遵循类似的程序吗?

2 个答案:

答案 0 :(得分:4)

C预处理器处理#ifdef。如果它没有定义,那么编译器本身甚至看不到代码,所以它没有办法进入.exe。

答案 1 :(得分:2)

C ++编译分为多个阶段。首先,通过扩展#include#define等来预处理代码。这在文本级别起作用,相当于实际修改源代码。

在这种情况下,编译器将优化预处理器#ifdef块中的代码,因为当预处理器运行时,它会将该代码拼接出源文件。换句话说,实际执行编译和代码生成的编译器部分根本不会看到代码的那一部分。就好像它不存在一样。

希望这有帮助!