我试图在Visual Studio 2010中编译一个简单的ansi C示例,并遇到此错误编译:
错误:patchC.c(5):错误C2275:'FILE':非法使用此类型作为表达式
PROGRAM1:
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
FILE *fp;
fp = fopen("test.txt", "r");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
同一程序在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;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这种行为,任何人都可以回答?
Jam*_*lis 16
Visual C++编译器仅支持C90.在C90中,所有局部变量声明必须在任何语句之前的块的开头.所以,声明fp中main的需求来前printf:
int main(void) {
// Declarations first:
FILE *fp;
// Then statements:
printf("Hello world!\n");
fp = fopen("test.txt", "r");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C99和C++都允许声明与块中的其他语句混合.Visual C++编译器不支持C99.如果您将原始代码编译为C++文件(扩展名为.cpp),则会成功编译.
| 归档时间: |
|
| 查看次数: |
5263 次 |
| 最近记录: |