GNU89,混合声明和循环初始声明
GCC和ICC的默认C语言是GNU89。 GNU89允许混合声明,例如
int i; i = 0; int j;
我推断(错误地)来自SO上的一些其他post,例如C:for loop int initial declaration ,这意味着我可以做到
for(int i=0; i<n; i++)
使用GNU89但是当我这样做时,我得到了
error: 'for' loop initial declarations are only allowed in C99 mode
显然,混合声明和循环初始声明不是一回事(即一个并不暗示另一个)。
如果我只能有一个,我宁愿有循环初始声明。 当然,我可以使用GNU99,但这不是重点。 默认值是GNU89,它已经破坏了一些C89规则(它还允许BCPL / C ++样式注释)。 是否存在允许混合声明而不是循环初始声明的一些基本原因?
混合声明和语句早于其他语言的C89(例如,Algol 68),并且是少数C89编译器(不是MSCV)中的常见扩展。
另一方面, for
语句中的计数器变量声明来自C到C ++ 98,据我所知,没有C89编译器发现它很有用,可以将它添加为C89扩展。