我有一个C代码,它使用简单的逗号运营商为什么下面的C代码失败而编译
main()
{
int a= 1,2,3;
printf("%d",a);
}
现在,当我编译了一个错误,而很少修改同一程序运行正常
main()
{
int a;
a= 1,2,3;
printf("%d",a);
}
为什么这样?
我有一个C代码,它使用简单的逗号运营商为什么下面的C代码失败而编译
main()
{
int a= 1,2,3;
printf("%d",a);
}
现在,当我编译了一个错误,而很少修改同一程序运行正常
main()
{
int a;
a= 1,2,3;
printf("%d",a);
}
为什么这样?
在第一种情况下,会引发错误,因为如果您假装声明多个变量或分配多个值,编译器无法区分。
int a= 1,2,3;
您的意思是int a; a = 1, 2, 3
,或者int a = 1, int 2, int 3
?编译器无法从上下文中得知(即使或不是合法变量名称)。
第二种情况下不存在这种歧义,因此没有错误(但是仍然发出警告)。
PS:它是int main()
而不是void main()
。
和声明'a = 1,2,3;'就像有 a = 1; 2; 3; 并且在执行第一个语句之后,a被赋值1, 表达式'2'和'3'被评估,但没有任何变化... – Mallik 2012-03-01 12:01:38
使用变量初始化形式时,逗号不作为相同的运算符。这是一种特殊的简短形式,用于在同一行中声明多个变量,因此需要自己的语法。
因此,在语句int a = 1, 2, 3
中,逗号实际上的解释与语句a = 1, 2, 3
中的不同。
前者是语法错误,因为它不符合多变量声明形式。第二种是有效的语法,但正如其他人指出的那样毫无意义,因为语句2;
和3;
虽然在语法上正确,但什么也不做。
第二个代码不会**编译。 '.. \ main.c:7:5:error:expected';' 'printf''之前 – m0skit0 2012-03-01 11:31:05
我的错误,更正了它 – 2012-03-01 11:32:28
其中是3printf(“%d”,3); ,我只能看到printf(“%d”,a); – 2012-03-01 11:38:35