使用 C 中的定义效率低下?

using definitions in c inefficient?

像这样使用 c 中的定义:

#define C1 42
#define C2 10
#define finalC C1 * C2

效率低下,因为此代码在 运行 时间内总是 运行,即使可能不需要计算?

对于 run-time 处的代码,没有合理的编译器会将 42 乘以 10。乘积 420 将在编译期间计算(除非优化掉,因为在最终程序中甚至不需要它)。

在程序翻译期间评估宏定义和替换,而不是在程序 运行 时评估。

as this code will be ALWAYS run during run-time even though the calculation might not be needed?

乘法很可能不会在run-time执行。例如这个短函数:

#define C1 42
#define C2 10
#define finalC C1 * C2

int foo() { return finalC; }

可以compile变成:

foo():
        push    rbp
        mov     rbp, rsp
        mov     eax, 420
        pop     rbp
        ret

而且没有任何优化标志!

宏展开发生在编译器处理代码之前;并且它被允许并且倾向于计算常量表达式。

PS - 使用的编译器是 GCC 11.3,目标架构是 x86_64.