大家好
我今天做了这个程序
int main()
{
int a = 1,2; /* Shows error */
int b = (1,2); /* No error */
}
为什么第一个显示错误而第二个没有?只需 ( ) 就可以编译一个程序。为什么?
——修罗提
大家好
我今天做了这个程序
int main()
{
int a = 1,2; /* Shows error */
int b = (1,2); /* No error */
}
为什么第一个显示错误而第二个没有?只需 ( ) 就可以编译一个程序。为什么?
——修罗提
int a = 1,2;
2
被视为不能以数字开头的变量名,因此出现错误。
int b = (1,2);
逗号运算符从左到右计算操作数并返回列表中的最后一个表达式,即2
在括号内,语言指定将出现一个表达式。在这种情况下 ( b
),逗号代表 C 中的逗号运算符。
没有括号,该语言指定变量声明用逗号分隔。在 的示例中a
,编译器(解析器)需要额外的变量声明。
原因是在您的第一条语句int a = 1,2;
中,逗号未解析为序列运算符。它是声明列表的一部分,并尝试实例化2
该语言不允许的命名整数变量。
第二条语句中的括号int b = (1,2);
强制将逗号解析为序列运算符。
(1,2)
计算结果为列表中的最后一个表达式,即2
.
另一个例子:(a,b,c)
将评估为c
.
如果您想使用小数,请使用 float/double 类型并将点用作十进制符号:double d = 1.2;
它们对我来说毫无意义。
但后来我想起了 for 循环中的多个操作。例如:
for (a=1,b=2; a<1; a++)
知道1是一个有效的表达式,并且表达式是有效的语言元素,我的结论是(1,2)计算 1(但对它不做任何事情),然后计算 2 并返回 2。
最后:
b = (1,2);
什么是像以前一样评估 1 和 2,返回 2,并将其分配给 b。