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