【问题标题】:Why FILE pointer need to be declared out main() in Visual Studio 2010?为什么 FILE 指针需要在 Visual Studio 2010 中声明为 main()?
【发布时间】:2011-05-04 02:30:23
【问题描述】:

我试图在 Visual Studio 2010 中编译一个简单的 ansi C 示例,但遇到了这个错误编译:

错误: patchC.c(5): error C2275: 'FILE' : 非法使用这种类型作为表达式

程序1:

#include <stdio.h>

int main(void) {
    printf("Hello world!\n");
    FILE *fp;
    fp = fopen("test.txt", "r");
    return 0;
}

相同的程序在 gcc v4.5.2 中编译没有错误。

但是,如果我把“FILE *fp;”从 main() 行出来,程序可以优雅地编译。

程序2:

#include <stdio.h>

FILE *fp;

int main(void) {
    printf("Hello world!\n");
    fp = fopen("test.txt", "r");
    return 0;
}

我不明白为什么会出现这种行为,有人可以回答吗?

【问题讨论】:

    标签: c visual-c++ c89


    【解决方案1】:

    Visual C++ 编译器仅支持 C90。在 C90 中,所有局部变量声明都必须位于块的开头,在任何语句之前。所以,fpmain 中的声明需要在printf 之前:

    int main(void) {
        // Declarations first:
        FILE *fp;
    
        // Then statements:
        printf("Hello world!\n");
        fp = fopen("test.txt", "r");
        return 0;
    }
    

    C99 和 C++ 都允许声明与块中的其他语句混合。 Visual C++ 编译器不支持 C99。如果您将原始代码编译为 C++ 文件(扩展名为 .cpp),它将成功编译。

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 2019-04-09
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多