在c语言中使用逗号运算符

在c语言中使用逗号运算符,c,comma,C,Comma,我已经读到逗号运算符被用来分配表达式,而正确的表达式被提供给左值 但为什么这个程序在不使用括号的情况下将左表达式赋值给左值呢 int b=2; int a; a=(b+2,b*5); // prints 10 as expected a=b+2,b*5; // prints 4 when not using parenthesis 还包括以下工作 int a =(b+2,b*5); 这会产生错误,我不明白原因 int a =b+2,b*5; // Error 由于,运算符的优先

我已经读到逗号运算符被用来分配表达式,而正确的表达式被提供给左值

但为什么这个程序在不使用括号的情况下将左表达式赋值给左值呢

int b=2;
int a;
a=(b+2,b*5);  // prints 10 as expected
a=b+2,b*5;    // prints 4 when not using parenthesis
还包括以下工作

int a =(b+2,b*5);
这会产生错误,我不明白原因

int a =b+2,b*5;   // Error

由于
运算符的优先级低于
=
运算符的优先级,因此

a=b+2,b*5

。。。将实际评估为

a = b + 2;
b * 5;
inti=b+2,b*5
有点不同,因为逗号在声明语句中有不同的含义,将不同的声明彼此分开。考虑这一点:

int a = 3, b = 4;
这里仍然有逗号,但现在它分隔了声明上的两个变量赋值。这就是编译器试图处理示例中的那一行的方式-但未能从
b*5
行中获得任何意义(它既不是赋值也不是声明)


现在,
inta=(b+2,b*5)
不同了:将
b+2,b*5
表达式的值赋给类型为
int
的变量
a
。第一个子表达式被丢弃,只剩下
b*5

逗号运算符的进位低于赋值运算符,并且在类型声明中具有特殊意义,这就是上一个示例失败的原因。逗号运算符几乎不需要,而且几乎总是被错误使用。不要使用它