无法理解输出结果的原因

3

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

#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个回答

9
  1. 当你使用逗号时,表达式会将右参数作为结果,这就是为什么 d=(a,b); 会被计算为 d=b
  2. = 比逗号有 更高的优先级,因此表达式 c=a,b; 被计算为 (c=a),b;

这不是答案的一部分,但值得一提的是整个 c=a,b; 表达式被计算为 b,而不是 a,例如如果你写 d=(c=a,b);,你会得到 c=ad=b


3

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


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");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接