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

时间:2013-11-23 14:17:00

标签: c++ c operators

使用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 个答案:

答案 0 :(得分:9)

  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