GNU89,混合声明和循环初始声明

时间:2014-04-22 20:47:30

标签: c gcc c99 c89

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 ++样式注释)。是否存在允许混合声明而不是循环初始声明的一些基本原因?

1 个答案:

答案 0 :(得分:6)

混合声明和声明早于其他语言的C89(例如,Algol 68),并且是少数C89编译器(不是MSCV)的常见扩展。

另一方面,for语句中的计数器变量声明来自C到C ++ 98,据我所知,没有C89编译器发现它很有用,可以将它添加为C89扩展。