gpt4 book ai didi

C: for loop int 初始声明

转载 作者:太空狗 更新时间:2023-10-29 16:20:01 25 4
gpt4 key购买 nike

有人可以详细说明以下 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);
}
}

P.S:我依稀记得 int i 应该在 for 循环之前声明。我应该声明,我正在寻找一个给出 C 标准历史背景的答案。

最佳答案

for (int i = 0; ...) 

是 C99 中引入的语法。为了使用它,您必须通过将 -std=c99(或某些更高版本的标准)传递给 GCC 来启用 C99 模式。 C89版本是:

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

编辑

从历史上看,C 语言总是强制程序员在 block 的开头声明所有变量。所以像这样:

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

必须重写为:

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

block 定义为:

block := '{' declarations statements '}'

C99、C++、C# 和 Java 允许在 block 中的任何位置声明变量。

真正的原因(猜测)是在解析 C 源代码时尽快分配内部结构(如计算堆栈大小),而不是进行另一次编译器传递。

关于C: for loop int 初始声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com