在c中使用逗号运算符

时间:2013-09-06 20:28:47

标签: c comma

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

但是为什么这个程序在不使用括号时将左表达式分配给左值。我正在使用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 个答案:

答案 0 :(得分:8)

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

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表达式的值分配给a类型的变量int。第一个子表达式被丢弃,只剩下b * 5