GCC和ICC的默认C方言是GNU89。GNU89允许混合声明,例如:
int i;
i = 0;
int j;
我曾从stackoverflow中的其他帖子(例如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++风格的注释)。混合声明为什么被允许但是循环初始化声明不能呢?是否有某些根本原因?
-Wall
成为gcc的默认选项 - 这可能会在一夜之间减少一半的初学者C/C++问题在SO上的提问。;-) - Paul R