警告:ISO C90禁止混合声明和代码[-Wdeclaration-after-statement]

时间:2017-02-16 00:59:45

标签: c c89

我有这个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个警告。

有关如何阻止它的任何提示?

1 个答案:

答案 0 :(得分:5)

这是因为在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)。