GCC和ICC的默认C语言是GNU89。 GNU89允许混合声明,例如
int i;
i = 0;
int j;
我推断(错误地)来自其他一些帖子,例如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 ++样式注释)。是否存在允许混合声明而不是循环初始声明的一些基本原因?
答案 0 :(得分:6)
混合声明和声明早于其他语言的C89(例如,Algol 68),并且是少数C89编译器(不是MSCV)的常见扩展。
另一方面,for
语句中的计数器变量声明来自C到C ++ 98,据我所知,没有C89编译器发现它很有用,可以将它添加为C89扩展。