警告:ISO C90禁止在语句之后声明变量[-Wdeclaration-after-statement]

5

我有这个c文件

#include <stdio.h>

int main(int argc, char *argv[])
{
  int x,i,sum;
  sum = 0;
  FILE *fin;
  fin = fopen("testdata1", "r");


    for (i = 0; i < 20; i++ ){
      fscanf(fin, "%d", &x);
      sum += x;
    }

    printf("Sum = %d", sum);
    fclose(fin);
    return 0;


}

我用gcc -ansi -pedantic -Wall app.c -o app编译了它。

在编译过程中,我一直收到这个警告错误

警告:ISO C90禁止混合声明和代码[-Wdeclaration-after-statement] FILE *fin; ^ 1 warning generated.

您有什么提示可以让我停止这个错误吗?


使用-std=c11进行编译。 - M.M
我通过 gcc -ansi -pedantic -Wall app.c -o app 进行了编译。 - code-8
将“-ansi”更改为“-std=c11”。 - M.M
我认为我们不允许那样做。那是其中一个要求,而且加上,以前我没有遇到过那个错误。 - code-8
1个回答

11

这是因为在C89/C90中,您必须首先声明(最终初始化)变量,然后再放置代码。这是突出显示的问题:

int x,i,sum;
sum = 0; // This is code!
FILE *fin;

第一种解决方案是在声明中初始化 sum

int x,i,sum = 0;

第二种解决方案是在代码开头初始化sum

int x,i,sum;
FILE *fin;

sum = 0;
fin = fopen("testdata1", "r");

第三种解决方案是使用另一个标准进行编译。对于gcc/mingw,可以通过传递命令行选项-std=<your standard>来实现,例如-std=c99-std=c11(并删除-ansi)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接