2011-05-04 3 views
5

나는 비주얼 스튜디오 2010에서 간단한의 ANSI C 예제를 컴파일하려고 및이 오류의 컴파일에서 온되었습니다Visual Studio 2010에서 FILE 포인터를 main()으로 선언해야하는 이유는 무엇입니까?

오류 : patchC.c (5) : 오류 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()의 라인 밖으로, 프로그램을 정상적으로 컴파일합니다.

program2에 :이 동작은, 사람이 대답 할 이유가 파악되지 않는

#include <stdio.h> 

FILE *fp; 

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

?

답변

16

Visual C++ 컴파일러는 C90 만 지원합니다. C90에서 모든 지역 변수 선언은 블록의 시작 부분, 모든 명령문 앞에 있어야합니다. 그래서, 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++ 모두 허용 선언을 한 블록에서 다른 문으로 혼합 할 수 있습니다. Visual C++ 컴파일러는 C99를 지원하지 않습니다. 원래 코드를 C++ 파일 (.cpp 확장자)로 컴파일하면 컴파일이 성공적으로 완료됩니다.

+0

당신은 바로 James McNellis입니다. 빠른 답장을 보내 주셔서 감사합니다! – Msum

+0

답이 맞다면 왼쪽의 체크 표시를 눌러야합니다. – Alex

+0

고마워, 나는 그걸 몰랐다. – Msum

관련 문제