以下代码无法编译.
int n;
int x=1, n++; //compiler error
Run Code Online (Sandbox Code Playgroud)
错误:在'++'标记之前预期'=',',',';','asm'或' attribute '
如果我们将x的声明分开,程序编译就好了.
int n, x;
x=1, n++;//no error
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
x=1,n++;
Run Code Online (Sandbox Code Playgroud)
是一个表达式语句,,这里是逗号运算符.然而,
int x=1,n++;
Run Code Online (Sandbox Code Playgroud)
是一个声明,而不是表达式,,这里不解释为逗号运算符.
C11§6.7声明
Run Code Online (Sandbox Code Playgroud)declaration: declaration-specifiers init-declarator-listopt ; static_assert-declaration declaration-specifiers: storage-class-specifier declaration-specifiersopt type-specifier declaration-specifiersopt type-qualifier declaration-specifiersopt function-specifier declaration-specifiersopt alignment-specifier declaration-specifiersopt init-declarator-list: init-declarator init-declarator-list , init-declarator // comma init-declarator: declarator declarator = initializer
声明中的逗号只是一个分隔符.由于n++不是有效的init-declarator,编译器会报告错误.