8

大家好

我今天做了这个程序

int main()
{
   int a = 1,2; /* Shows error */
   int b = (1,2); /* No error */
}

为什么第一个显示错误而第二个没有?只需 ( ) 就可以编译一个程序。为什么?

——修罗提

4

5 回答 5

9

int a = 1,2; 2被视为不能以数字开头的变量名,因此出现错误。

int b = (1,2); 逗号运算符从左到右计算操作数并返回列表中的最后一个表达式,即2

于 2010-08-14T16:36:31.610 回答
6

在括号内,语言指定将出现一个表达式。在这种情况下 ( b),逗号代表 C 中的逗号运算符。

没有括号,该语言指定变量声明用逗号分隔。在 的示例中a,编译器(解析器)需要额外的变量声明。

于 2010-08-14T16:34:33.403 回答
3

原因是在您的第一条语句int a = 1,2;中,逗号未解析为序列运算符。它是声明列表的一部分,并尝试实例化2该语言不允许的命名整数变量。

第二条语句中的括号int b = (1,2);强制将逗号解析为序列运算符。

于 2010-08-14T16:36:59.317 回答
0

(1,2)计算结果为列表中的最后一个表达式,即2.

另一个例子:(a,b,c)将评估为c.

如果您想使用小数,请使用 float/double 类型并将点用作十进制符号:double d = 1.2;

于 2010-08-14T16:33:53.483 回答
0

它们对我来说毫无意义。

但后来我想起了 for 循环中的多个操作。例如:

for (a=1,b=2; a<1; a++)

知道1是一个有效的表达式,并且表达式是有效的语言元素,我的结论是(1,2)计算 1(但对它不做任何事情),然后计算 2 并返回 2。

最后:

b = (1,2);

什么是像以前一样评估 1 和 2,返回 2,并将其分配给 b。

于 2010-08-14T16:37:02.807 回答