什么版本的C语言允许你在for循环中声明变量?

问题描述 投票:0回答:1

自从我开始用C语言编码以来,我被教导说

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

在C++中是可行的,但在C语言中,你必须在for循环之外声明变量,比如这样。

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

I 具体 记得这是个问题,因为我开始用C语言编码时,习惯了C++的for循环。

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

"for ( clause-1 ; expression-2 ; expression-3 ) statement"

并在它的语法描述中指出:

"如果clause-1是一个 声明它声明的任何标识符的范围是声明的剩余部分和整个循环"。

然后我做了一个测试,发现我的gcc (Debian 8.3.0)在-std=c99和-std=c11模式下编译C++风格的循环时,即使使用-Wall标志也没有任何警告。

这是gcc的扩展,还是C语言支持这种类型的循环已经有一段时间了,只是我没有注意到?

c for-loop gcc c99 c11
1个回答
9
投票

这在C99中被标准化了

从。https:/en.cppreference.comwclanguagefor。

(C99)如果它是一个声明,那么它在整个循环体的范围内,包括init_clause的剩余部分、整个cond_expression、整个iteration_expression和整个loop_statement。对于这个声明中声明的变量,只允许使用自动和寄存器存储类。

© www.soinside.com 2019 - 2024. All rights reserved.