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

问题描述 投票:0回答:2

以这段代码为例:

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

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

c++ optimization macros
2个回答
4
投票

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


2
投票

C++ 编译分为多个阶段。 首先,通过展开

#include
#define
等对代码进行预处理。这在文本级别上起作用,相当于实际修改源代码。

在这种情况下,编译器将优化预处理器

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

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.