根据 C FAQ,在 C 中“内联”代码基本上有 3 种实用方法:
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
或者
#define FUNC(arg1, arg2) (expr1, expr2, expr3)
为了澄清这一点,表达式中使用了参数,逗号运算符返回最后一个表达式的值。
或者
使用作为gcc 扩展和 c99 标准inline
支持的声明。
该do { ... } while (0)
方法在Linux内核中被广泛使用,但我没有经常遇到其他两种方法。
我特别指的是多语句“函数”,而不是像 MAX 或 MIN 这样的单语句。
每种方法的优缺点是什么,为什么在各种情况下您会选择其中一种?