我正在看这样的东西:
#define foo(x) \
(((a > b) ? \
0 : 1), \
(c ? 2 : 3), \
(d ? 4 : 5))
我不确定如何解释这一点。有人可以帮我吗?
我正在看这样的东西:
#define foo(x) \
(((a > b) ? \
0 : 1), \
(c ? 2 : 3), \
(d ? 4 : 5))
我不确定如何解释这一点。有人可以帮我吗?
本质上\
,就终止#define
语句而言,它会忽略换行符,因此每次编写foo(var)
代码时,它都会被替换为
((((a > b) ?
0 : 1),
(c ? 2 : 3),
(d ? 4 : 5))
逗号运算符并没有做很多事情,除了由逗号运算符分隔的语句组成的语句的最终“返回”值是最正确的值。
所有这些都被解释了,这并不是一个非常有效的方法,#define
因为您使用a
, b
, c
, 并且d
在#define
and 中仅x
作为参数引用
逗号运算符评估其所有操作数并返回最后一个的值。因此, a
, b
,c
和d
将被评估,结果f(x)
将是 4 或 5,具体取决于是否d
为非零。