逗号运算符
2026/7/6小于 1 分钟
逗号运算符
逗号运算符(,)的规则很简单:从左到右依次求值,整个表达式的值是最后一个操作数的值,前面的操作数只是"顺带执行副作用"用的。
比较难理解的例子
#define SWAP(a, b, t) (t = a, a = b, b = t)
int x = 1, y = 2, tmp;
int result = SWAP(x, y, tmp); // x=2, y=1, result = tmp的旧值(1),因为逗号表达式返回最后一个tmp=(A,B,C); A,B的操作不过是顺带的,把C操作完了,整个表达式返回的是C的值
比较容易理解的
#define LOG_AND_RETURN(msg, code) (printf("%s\n", msg), code)
int func() {
return LOG_AND_RETURN("error occurred", -1);
// 展开成: return (printf("error occurred\n"), -1);
// 先打印,再返回-1
}#define ASSERT_LOG(cond, msg) \
((cond) ? (void)0 : (printf("Assert failed: %s\n", msg), abort()))#define DBG_EVAL(expr) (printf(#expr " = "), printf("%d\n", (expr)), (expr))
int result = DBG_EVAL(3 + 4);
// 先打印 "3 + 4 = ",再打印 "7",最后result还是拿到7条件 cond 为真时什么都不做,为假时打印错误信息并终止程序
#define ASSERT_LOG(cond, msg) \
((cond) ? (void)0 : (printf("Assert failed: %s\n", msg), abort()))
