Wil*_*hey 1 c gcc for-loop c99 c11
自从我开始用 C 编码以来,我就被教导说
for(int i=0;i<10;++i)
...
Run Code Online (Sandbox Code Playgroud)
在 C++ 中工作,但在 C 中,您必须在 for 循环之外声明变量,如下所示:
int i;
for(i=0;i<10;++i)
...
Run Code Online (Sandbox Code Playgroud)
我特别记得这是一个问题,因为当我开始用 C 编码时,我已经习惯了 C++ for 循环。
但是今天我正在阅读 2010 年 12 月的 C11 标准草案,它将 for 循环定义为
“for(子句1;表达式2;表达式3)语句”
在它的语法描述中,它指出:
“如果第 1 条是声明,则它声明的任何标识符的范围是声明的其余部分和整个循环”。
然后我做了一个测试并意识到我的 gcc(Debian 8.3.0)在 -std=c99 和 -std=c11 模式下以 C++ 风格编译 for 循环,即使使用 -Wall 标志也没有警告。
这是一个 gcc 扩展,还是 C 支持这种类型的循环有一段时间了,我只是没有注意到?
小智 9
它在 C99 中被标准化
来自:https : //en.cppreference.com/w/c/language/for
(C99) 如果是声明,则在整个循环体的作用域内,包括init_clause的剩余部分、整个cond_expression、整个iteration_expression和整个loop_statement。此声明中声明的变量仅允许使用 auto 和 register 存储类。
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |