【发布时间】:2017-10-24 20:24:18
【问题描述】:
假设我们有一个宏 + 一个函数:
#define MY_MACRO (2*64)
int foo(void)
{
return (2 * (MY_MACRO));
}
gcc 会在编译时优化 MY_MACRO 以等于 128,而不是使计算成为运行时操作吗?更进一步,在 return 语句中,它会以类似的方式将其优化为等于 256 吗?
如果是这样,预处理器会在可能的优化方面寻找其他什么东西?
【问题讨论】:
-
优化器甚至看不到宏。这是一个完全不同的层次
-
@EugeneSh.: 是的,但问题仍然存在于
return 2 * (2*64); -
@YvesDaoust 目前的问题是:预处理器在可能的优化方面会寻找什么其他东西 - 根本没有意义,因为预处理器没有'不做任何优化。 OP 正在寻找的是常量表达式。
-
@EugeneSh.: 问题“gcc 会在编译时将 MY_MACRO 优化为等于 128,而不是使计算成为运行时操作吗?”和“更进一步,在 return 语句中,它会以类似的方式将其优化为等于 256 吗?”保持。 gcc 不是预处理器。
标签: c gcc optimization