0

以这段代码为例:

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

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

4

2 回答 2

4

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

于 2012-05-15T23:38:13.660 回答
2

C++ 编译工作在许多阶段。首先,通过展开#includes,#defines等对代码进行预处理。这在文本层面起作用,相当于实际修改源代码。

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

希望这可以帮助!

于 2012-05-15T23:38:32.230 回答