#define语句,用逗号分隔多个元素

时间:2013-02-07 18:37:27

标签: c c-preprocessor

我正在看这样的事情:

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

我不知道如何解释这个。有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

基本上\会忽略换行符,因为只要终止#define语句,所以每次在代码中编写foo(var)时都会将其替换为

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

逗号运算符不会做很多事情,除了由逗号运算符分隔的语句组成的语句的最终“返回”值是最右边的值。

所有这些都在解释,因为您使用#defineabc,所以这并不是非常有效d #define仅引用x作为参数

答案 1 :(得分:0)

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