0

我正在看这样的东西:

#define foo(x)   \
    (((a > b) ?  \
      0 : 1),    \
     (c ? 2 : 3), \
     (d ? 4 : 5))

我不确定如何解释这一点。有人可以帮我吗?

4

2 回答 2

4

本质上\,就终止#define语句而言,它会忽略换行符,因此每次编写foo(var)代码时,它都会被替换为

((((a > b) ?  
  0 : 1),    
 (c ? 2 : 3), 
 (d ? 4 : 5))

逗号运算符并没有做很多事情,除了由逗号运算符分隔的语句组成的语句的最终“返回”值是最正确的值。

所有这些都被解释了,这并不是一个非常有效的方法,#define因为您使用a, b, c, 并且d#defineand 中仅x作为参数引用

于 2013-02-07T18:43:29.443 回答
0

逗号运算符评估其所有操作数并返回最后一个的值。因此, a, b,cd将被评估,结果f(x)将是 4 或 5,具体取决于是否d为非零。

于 2013-02-07T18:41:31.977 回答