我看过简单的宏示例,但想知道更复杂的东西,比如使用 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 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4915834/