为什么两种情况下的不同行为是第一 int i = 1,2,3; 和第二。 int i; i = 1,2,3;

使用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.在这两种情况下,任何人都能解释编译器行为吗?编译器如何?解释这两个陈述?

提前感谢您的意见。

  1. 在第一种情况下,逗号分隔几个相同类型的变量的声明和初始化

     int i = 1, j = 2, k = 3; 

    您可以添加括号来告诉编译器它是一个表达式。

     int i = (1, 2, 3); 

    如果你将它们组合在一起,就更容易理解为什么逗号在没有括号的情况下是不明确的:

     int i = (1, 2, 3), j = 4, k = 5; 
  2. 在第二种情况下,逗号分隔3个表达式。

     (i = 1), 2, 3