使用GCC编译器,在C程序中跟随两个运算符的情况,观察到不同的行为。
1
int i = 1,2,3;
printf("%d",i); // this will give compile time error
和
2
int i;
i = 1,2,3;
printf("%d",i); // Its output will be 1.
在第一种情况下,编译器给出错误“错误:期望标识符或'('数字常量之前'”。 在第二种情况下,没有错误,输出为1。 任何人都可以在这里详细解释两种情况下的编译器行为吗? 编译器如何解释这两个语句?
提前感谢您的意见。
答案 0 :(得分:9)
在第一种情况下,逗号分隔了几个相同类型变量的声明和初始化:
int i = 1, j = 2, k = 3;
您可以添加括号以告诉编译器它是一个表达式。
int i = (1, 2, 3);
如果你将它们组合在一起,就更容易理解为什么逗号在没有括号的情况下是不明确的:
int i = (1, 2, 3), j = 4, k = 5;
在第二种情况下,逗号分隔3个表达式。
(i = 1), 2, 3