使用 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.
像这样使用 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.