警告:ISO C90禁止混合声明和代码[-Wdeclaration-后声明】

问题描述:

我有警告:ISO C90禁止混合声明和代码[-Wdeclaration-后声明】

#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

编译它在编译时,我一直得到这个警告这个C文件错误

警告:ISO C90禁止混合声明和代码[-Wdeclaration-后声明】 FILE *鳍; ^ 1生成警告。

对我怎么停止任何提示?

+0

使用'-std = c11'编译 –

+0

我编译过'gcc -ansi -pedantic -Wall app.c -o app' – ihue

+0

将'-ansi'改为'-std = c11' –

这是因为在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),实现了 。