我看到了一些简单的宏示例,但是想知道一些更复杂的东西,比如if语句和重新分配给定的变量像这样更复杂的表达式可以在宏中完成吗我有一个函数将运行数十亿次,所以最好让预处理器把代码扔进去,而不是来回传递变量。
假设我有以下功能:

int foo(int a, int b, int c){
if (a > 2)
  c = a;
if (b > 3)
  c = b;

return a + b + c;
}

我怎样才能把它变成一个宏呢?

最佳答案

注意,宏与函数调用不同——宏实际上代替了使用它们的C源代码,而不是调用和返回——所以可能会有很多意想不到的行为!你的例子可以做成这样的宏:

#define FOO(a,b,c)((a)+(b)+(((b)>3)?(b):((a)>2)?(a):(c)))

但是,还有many pitfalls when using complex macros,例如不清楚的运算符优先级和重复的自动递增/递减运算符。
可能最好听从其他答案的建议,使用其他策略,而不是复杂的宏。

关于c - C宏用于更复杂的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4915834/

10-08 22:45