在 c 中使用逗号运算符



我已经读到逗号运算符用于分配表达式,并且向左值提供了正确的表达式。

但是为什么这个程序在不使用括号时将左表达式分配给左值?我正在使用涡轮增压 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

我不明白为什么。

因为,运算符的优先级低于=运算符的优先级,所以这...

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 .

相关内容

  • 没有找到相关文章

最新更新