无法理解输出的原因

时间:2012-04-30 06:25:15

标签: c

我正在运行代码段。但我无法理解它产生的代码和输出。

#include <stdio.h>
int main()  
{ 
  int a, b,c, d;    
  a=3;    
  b=5;    
  c=a,b;    
  d=(a,b);      
  printf("c = %d" ,c);    
  printf("\nd = %d" ,d);    
  return 0;
}  

该程序的输出是:

c=3
d=5

我没有得到输出的结果?

3 个答案:

答案 0 :(得分:9)

  1. 当您有逗号时,表达式将被评估为正确的参数,这就是d=(a,b);被评估为d=b的原因。
  2. =的逗号为higher precedence,因此表达式c=a,b;的评估为(c=a),b;
  3. 不是答案的一部分,但值得一提的是整个c=a,b;表达式被评估为b,而不是例如d=(c=a,b);。如果您撰写c=a,则会获得d=b和{{1}};

答案 1 :(得分:3)

考虑C的逗号运算符的优先级。

答案 2 :(得分:1)

请注意,逗号运算符可能在C ++中过载。因此,实际行为可能与预期的非常不同。

例如,Boost.Spirit非常巧妙地使用逗号运算符来实现符号表的列表初始值设定项。因此,它使以下语法成为可能和有意义的:

keywords = "and", "or", "not", "xor";

请注意,由于运算符优先级,代码(有意!)与

相同
(((keywords = "and"), "or"), "not"), "xor";

也就是说,第一个调用的运算符是keywords.operator =(“and”),它返回一个代理对象,其上调用了剩余的运算符:

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
相关问题