【发布时间】:2016-07-24 22:41:09
【问题描述】:
有没有办法在 C 中执行compile-time function execution?与海合会?我只看到使用constexpr in C++ 提供此功能。
【问题讨论】:
-
根据代码,编译器可能会将其优化为一个简单的值,但在 C 中没有标准的方法。
标签: c gcc compile-time
有没有办法在 C 中执行compile-time function execution?与海合会?我只看到使用constexpr in C++ 提供此功能。
【问题讨论】:
标签: c gcc compile-time
只要表达式中只涉及常量,它将在编译时计算。 C++ constexpr 主要是一种不涉及宏的类型安全方式。在 C 中,只有宏。例如:
#define CIRCLE_AREA(r) (int32_t)( (double)(r) * (double)(r) * M_PI )
int32_t area = CIRCLE_AREA(5);
在编译时执行所有计算,所以相当于写:
int32_t area = 78;
【讨论】:
static inline int32_t circle_area(double r) { return r * r * M_PI; }?
int main(void) { int32_t area1 = CIRCLE_AREA(5); int32_t area2 = circle_area(5); printf("%d vs %d\n", area1, area2); return 0; } — 汇编器输出(最相关位):movl $78, %edx - movl $78, %esi - leaq LC0(%rip), %rdi - xorl %eax, %eax - call _printf - 在我看来,函数和宏都被扩展为 78编译器。