GCC和ICC的默认C方言是GNU89。GNU89允许混合声明。
int i;
i = 0;
int j;我从其他一些帖子(如C: for loop int initial declaration )中推断(错误),这意味着我可以做到。
for(int i=0; i<n; i++)但是当我这么做的时候
error: 'for' loop initial declarations are only allowed in C99 mode显然,混合声明和循环初始声明并不是一回事(也就是说,一种并不意味着另一种)。
如果我只有一个,我宁愿有循环初始声明。当然,我可以使用GNU99,但这不是重点。默认的是GNU89,它已经打破了一些C89规则(它还允许BCPL/C++风格的注释)。是否存在允许混合声明而不允许循环初始声明的基本原因?
发布于 2014-04-22 21:09:22
混合声明和语句早于其他语言(例如,Algol 68)的C89,是少数C89编译器(而不是MSCV)中的一个常见扩展。
另一方面,for语句中的计数器变量声明是通过C++98传入C的,据我所知,没有一个C89编译器认为它足够有用,可以将其作为C89扩展添加。
https://stackoverflow.com/questions/23229872
复制相似问题