在c中使用逗号运算符

我已经读过,逗号运算符用于赋值表达式,右表达式用于左值。

但是为什么这个程序在不使用括号时将左表达式分配给左值。我正在使用turbo c编译器

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 

因为运算符的优先级低于= 1,所以……

a=b+2,b*5;

……实际上会被评估为……

 a = b + 2; b * 5; 

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

 int a = 3, b = 4; 

你这里仍然有逗号,但现在它将两个变量赋值声明分开。 这就是编译器试图从你的例子中处理那一行的方式 – 但是没有从b * 5行得到任何意义(它既不是赋值也不是声明)。

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