关于C语言宏FUN判断不成立场景及逗号表达式的技术咨询
关于C语言宏与逗号表达式的问题解答
一、FUN(xxx) == E_OK永远不会不成立
看你的宏定义:
#define FUN(arg) (fun1(arg), E_OK)
这里用到了逗号表达式,它的求值逻辑是先执行左边的fun1(arg),然后整个表达式的结果取右边的E_OK。不管fun1(arg)执行成功还是失败(哪怕它返回错误码),FUN(xxx)的结果都是E_OK,所以FUN(xxx) == E_OK这个条件永远为真,不会出现不成立的情况。
简单说,这个宏完全忽略了fun1的返回值,不管fun1执行状态如何,最终都返回E_OK,所以if块里的代码一定会执行,哪怕fun1(xxx)出错了也一样。
二、(xx, yy)是逗号表达式
这是C语言里的逗号运算符构成的表达式,核心特点:
- 执行顺序:从左到右依次计算每个子表达式,先算
xx,再算yy - 结果取值:整个表达式的最终结果是最后一个子表达式(也就是
yy)的值 - 优先级:逗号运算符是C语言里优先级最低的,所以通常需要加括号来限定范围,避免和其他运算符混淆
- 注意区分:函数参数列表、变量声明里的逗号是分隔符,不是逗号运算符,比如
int a, b;里的逗号是分隔符,而(a++, b++)里的是逗号运算符。
内容的提问来源于stack exchange,提问作者leotsing
相关产品推荐
相关产品推荐

