用于更复杂功能的 C 宏

标签 c macros

我看过简单的宏示例,但想知道更复杂的东西,比如使用 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/

相关文章:

c 宏 - 如何将宏名称设置为另一个宏的输出

scala - 在 Scala 中将案例类转换为 CSV

c - 使用宏初始化结构体

c - 在 C 中使用指针时为 "lvalue required as left operand of assignment"

c - 为什么这个程序在 ubuntu windows 桌面应用程序和 ubuntu 虚拟盒子上给出不同的输出?

c - 使用 execlp() 并遇到与指针相关的警告

c - 如何为嵌入的结构体赋值

ios - CONFIGURATION_AppStore。这是什么?

c - c 中带有内联 asm 的宏存在格式问题

macros - Haxe 宏,从生成的 var setter 调用静态方法