2011-05-04 7 views
5

yo estaba tratando de compilar un ejemplo sencillo ANSI C en Visual Studio 2010 y encontré con este error de compilación:¿Por qué el puntero de archivo debe declararse main() en Visual Studio 2010?

error: patchC.c (5): error C2275: 'Archivo': uso ilegal de este tipo como expresión

Program1:

#include <stdio.h> 

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

El mismo programa se compila sin errores en v4.5.2 gcc.

Pero, si pongo el "FILE * fp;" salir de la línea principal(), el programa compila con gracia.

Program2:

#include <stdio.h> 

FILE *fp; 

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

no entender por qué este comportamiento, cualquiera podría responder?

Respuesta

16

El compilador de Visual C++ solo es compatible con C90. En C90, todas las declaraciones de variables locales deben estar al principio de un bloque, antes de cualquier instrucción. Por lo tanto, la declaración de fp en main tiene que venir antes de la printf:

int main(void) { 
    // Declarations first: 
    FILE *fp; 

    // Then statements: 
    printf("Hello world!\n"); 
    fp = fopen("test.txt", "r"); 
    return 0; 
} 

C99 y C++ ambos permitir indicaciones para ser mezclado con otras declaraciones en un bloque. El compilador de Visual C++ no es compatible con C99. Si compiló su código original como un archivo C++ (con una extensión .cpp), se compilaría correctamente.

+0

Tienes razón James McNellis, gracias por la respuesta rápida! – Msum

+0

Si su respuesta es correcta, debe aceptarla haciendo clic en la marca de verificación a la izquierda. – Alex

+0

Gracias, no lo sabía. – Msum

Cuestiones relacionadas