GCC预处理器将如何优化?

ph1*_*ash 0 c optimization gcc

假设我们有一个宏+函数:

#define MY_MACRO (2*64)

int foo(void)
{
    return (2 * (MY_MACRO));
}
Run Code Online (Sandbox Code Playgroud)

gcc会MY_MACRO在编译时优化到128,而不是使计算成为运行时操作吗?并且在返回语句中更进一步,是否会以类似的方式将其优化为256?

如果是这样,预处理器在可能的优化方面还会寻找其他什么?

dus*_*uff 5

GCC预处理器将如何优化?

没有.预处理器不执行优化 - 它只是扩展宏和#include指令.

但是,一旦预处理器完成了您的代码,所有编译器看到的是:

return (2 * ((2*64)));
Run Code Online (Sandbox Code Playgroud)

它当然可以优化到相当于return 256.它既不知道也不关心输入(2*64)是由宏生成的.