我们如何在替换时间之前在 C macro/preprocessor 中完成数学运算,而不只是替换它?
How can we have math operation done in a C macro/preprocessor right before the substitution time, so not only substituting it?
如何在替换时间之后立即在 C macro/preprocessor 中完成 a 操作,以便不仅替换它而且在替换它之前完成所有数学运算真正的 C 代码?
这是预处理器根本做不到的事情。但是如果操作可以(理论上)在预处理器时完成,那么它也可以在编译时完成,优化器会处理这些事情。
所以像这样的代码片段:
#define add(x,y) (x+y)
int x=add(4,5);
将生成此 C 代码
int x=(4+5);
但是任何优化器都可以在编译时优化加法。所以汇编代码中不会出现加法。
预处理器可以做一些算术运算,但在替换之后不能。例如,这是可以的:
#if 1 + 1 == 42
...
#endif
如何在替换时间之后立即在 C macro/preprocessor 中完成 a 操作,以便不仅替换它而且在替换它之前完成所有数学运算真正的 C 代码?
这是预处理器根本做不到的事情。但是如果操作可以(理论上)在预处理器时完成,那么它也可以在编译时完成,优化器会处理这些事情。
所以像这样的代码片段:
#define add(x,y) (x+y)
int x=add(4,5);
将生成此 C 代码
int x=(4+5);
但是任何优化器都可以在编译时优化加法。所以汇编代码中不会出现加法。
预处理器可以做一些算术运算,但在替换之后不能。例如,这是可以的:
#if 1 + 1 == 42
...
#endif