我正在看这样的东西:
#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在#defineand 中仅x作为参数引用
逗号运算符评估其所有操作数并返回最后一个的值。因此, a, b,c和d将被评估,结果f(x)将是 4 或 5,具体取决于是否d为非零。