I was trying to compile a simple ansi C example in Visual Studio 2010 and came across with this error compiling:
Error: patchC.c(5): error C2275: 'FILE' : illegal use of this type as an expression
Program1:
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
FILE *fp;
fp = fopen("test.txt", "r");
return 0;
}
The same program compiles without errors in gcc v4.5.2.
But, if I put the "FILE *fp;" line out of the main(), the program compile gracefully.
Program2:
#include <stdio.h>
FILE *fp;
int main(void) {
printf("Hello world!\n");
fp = fopen("test.txt", "r");
return 0;
}
I don't figure out why this behavior, anyone could answer?
Declaring a File Pointer A file is declared as follows: FILE *fp; //fp is the name of the file pointer.
A file pointer stores the current position of a read or write within a file. All operations within the file are made with reference to the pointer. The data type of this pointer is defined in stdio. h and is named FILE.
For C File I/O you need to use a FILE pointer, which will let the program keep track of the file being accessed. For Example: FILE *fp; To open a file you need to use the fopen function, which returns a FILE pointer.
The Visual C++ compiler only supports C90. In C90, all local variable declarations must be at the beginning of a block, before any statements. So, the declaration of fp
in main
needs to come before the printf
:
int main(void) {
// Declarations first:
FILE *fp;
// Then statements:
printf("Hello world!\n");
fp = fopen("test.txt", "r");
return 0;
}
C99 and C++ both allow declarations to be intermixed with other statements in a block. The Visual C++ compiler does not support C99. If you compiled your original code as a C++ file (with a .cpp extension), it would compile successfully.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With