哪些C版本允许您在for循环中声明变量?

时间:2020-05-13 03:59:40

标签: c for-loop gcc c99 c11

自从我开始用C编码以来,我就被教导

for(int i=0;i<10;++i)
...

在C ++中工作,但是在C中,您必须像下面这样在for循环之外声明变量:

int i;
for(i=0;i<10;++i)
...

专门记住这是一个问题,因为当我开始使用C进行编码时,我习惯于使用C ++进行循环。

但是今天我正在阅读C11标准的2010年12月草案,它定义了for循环为

“ for(子句1;表达式2;表达式3)语句”

并在语法说明中指出:

“如果第1条是声明,则它声明的所有标识符的范围是声明的其余部分, 整个循环”。

当我进行测试时,意识到我的gcc(Debian 8.3.0)在-std = c99和-std = c11模式下以C ++样式编译循环,即使使用-Wall标志也没有警告。< / p>

这是gcc扩展,还是C暂时支持这种类型的循环,我只是没有注意到?

1 个答案:

答案 0 :(得分:9)

它已在C99中标准化

来自:https://en.cppreference.com/w/c/language/for

(C99)如果它是一个声明,则它在整个循环体的范围内, 包括init_clause的其余部分,整个cond_expression, 整个迭代表达式和整个loop_statement。只要 变量允许使用auto和register存储类 在此声明中声明。