当前位置:  开发笔记 > 编程语言 > 正文

C:for循环初始化声明

如何解决《C:for循环初始化声明》经验,为你挑选了2个好方法。

有人可以详细说明以下gcc错误吗?

$ gcc -o Ctutorial/temptable.out temptable.c 
temptable.c: In function ‘main’:
temptable.c:5: error: ‘for’ loop initial declaration used outside C99 mode

temptable.c:

...
/* print Fahrenheit-Celsius Table */
main()
{
    for(int i = 0; i <= 300; i += 20)
    {
        printf("F=%d C=%d\n",i, (i-32) / 9);        
    }
}

PS:我含糊地回忆起int i应该在for循环之前声明.我应该声明我正在寻找一个给出C标准历史背景的答案.



1> dfa..:
for (int i = 0; ...) 

是C99中引入的语法.要使用它,您必须通过-std=c99(或稍后的标准)传递给GCC 来启用C99模式.C89版本是:

int i;
for (i = 0; ...)

编辑

从历史上看,C语言总是迫使程序员在块的开头声明所有变量.所以类似于:

{
   printf("%d", 42); 
   int c = 43;  /* <--- compile time error */

必须改写为:

{
   int c = 43;
   printf("%d", 42);

块定义为:

block := '{' declarations statements '}'

C99,C++,C#和Java允许在块中的任何位置声明变量.

真正的原因(猜测)是在解析C源时尽快分配内部结构(如计算堆栈大小),而不需要另外编译器传递.


请注意:当使用c99版本时,不要忘记声明的变量是for-loop块的本地变量,并且当它已经超出范围时将不存在.
可能具有历史意义的附加说明.在C99标准之前围绕此规则的一种方法是在块内创建块.你可以在一个块的中间声明一个变量,然后将它包围起来,并将使用它的代码加上更多的括号{}

2> AProgrammer..:

在C99之前,您必须在块的开头定义局部变量.C99导入了C++特性,您可以将局部变量定义与指令混合,并且可以在forwhile控制表达式中定义变量.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有