我正在运行一个代码片段。但我无法理解它产生的代码和输出。
#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
我不知道输出是怎么来的?
我正在运行一个代码片段。但我无法理解它产生的代码和输出。
#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
我不知道输出是怎么来的?
d=(a,b);被评估为d=b.=具有比逗号更高的优先级,因此表达式c=a,b;被计算为(c=a),b;不是答案的一部分,但值得一提的是,整个c=a,b;表达式被评估为b,而不是 a,例如,如果你写d=(c=a,b);你得到c=aAND d=b;
考虑 C 的逗号运算符的优先级。
请注意逗号运算符可能在 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");