我试图在 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;
}
我不明白为什么会有这种行为,有人能回答吗?
最佳答案
Visual C++ 编译器只支持 C90。在 C90 中,所有局部变量声明必须在 block 的开头,在任何语句之前。因此,main
中的fp
声明需要在printf
之前:
int main(void) {
// Declarations first:
FILE *fp;
// Then statements:
printf("Hello world!\n");
fp = fopen("test.txt", "r");
return 0;
}
C99 和 C++ 都允许声明与 block 中的其他语句混合。 Visual C++ 编译器不支持 C99。如果将原始代码编译为 C++ 文件(扩展名为 .cpp),它将成功编译。
关于c - 为什么需要在 Visual Studio 2010 中将 FILE 指针声明为 main()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877812/