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