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

Ami*_*mar 0 c

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

main()
{
int a= 1,2,3;
printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)

现在,当我编译得到一个错误,而相同的程序几乎没有修改运行良好

main()
{
int a;
    a= 1,2,3;
    printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

m0s*_*it0 6

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

int a= 1,2,3; 
Run Code Online (Sandbox Code Playgroud)

你是说int a; a = 1, 2, 3,还是int a = 1, int 2, int 3?编译器无法从上下文中判断出来(即使23不是合法的变量名).

在第二种情况下不存在这种模糊性,因此没有错误(但无论如何都发出了警告).

PS:事实int main()并非如此void main().