为什么在编译时C代码失败

时间:2012-03-01 11:28:53

标签: c

我有一个C代码,它使用简单的逗号运算符

main()
{
int a= 1,2,3;
printf("%d",a);
}

现在当我编译得到一个错误,而同一个程序很少修改运行正常

main()
{
int a;
    a= 1,2,3;
    printf("%d",a);
}

为什么会这样?

2 个答案:

答案 0 :(得分:6)

在第一种情况下,引发错误是因为如果假装声明多个变量或分配多个值,编译器无法区分。

int a= 1,2,3; 

您的意思是int a; a = 1, 2, 3还是int a = 1, int 2, int 3?编译器无法从上下文中判断出来(即使 2 3 不是合法的变量名称)。

这种歧义在第二种情况下不存在,因此没有错误(但无论如何都会发出警告)。

PS:它是int main()而不是void main()

答案 1 :(得分:0)

使用变量初始化表单时,逗号不会作为同一个运算符。它是一种特殊的简写形式,用于在同一行上声明多个变量,因此需要自己的语法。

因此,在语句int a = 1, 2, 3中,逗号实际上的解释方式与语句a = 1, 2, 3中的解释不同。

前者是语法错误,因为它不符合多变量声明表单。第二个是有效的语法,但正如其他人所指出的那样是毫无意义的,因为语句2;3;在语法上是正确的,什么都不做。

请参阅this article on Wikipedia