2011-05-04 11 views
5

Ben Visual Studio 2010 basit bir ansi C örneğini derlemek için çalışıyor ve bu hata derlenmesi sürecine rastladı edildi:Visual Studio 2010'da neden FILE işaretçisinin main() olarak bildirilmesi gerekiyor?

Hata: patchC.c (5): Hata C2275: 'DOSYA': Bu tip yasadışı kullanımı bir ifade olarak

Program 1:

#include <stdio.h> 

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

aynı program gcc v4.5.2 hatasız derler.

"FILE * fp;" Ana hattan çıktı(), program incelikle derlenir.

PROGRAM2: Bu davranış, herkes cevap verebilir neden anlamaya yok

#include <stdio.h> 

FILE *fp; 

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

?

cevap

16

Visual C++ derleyici yalnızca C90'ı destekler. C90'da, tüm yerel değişken bildirimleri herhangi bir ifadeden önce bir bloğun başlangıcında olmalıdır. Yani, main içinde fp beyanı printf önce gelmesi gerekir:

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

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

C99 ve C++ her ikisine de izin beyanlar bir bloktaki diğer tablolar karışmış olması. Visual C++ derleyici C99'u desteklemiyor. Orijinal kodunuzu C++ dosyası olarak (.cpp uzantılı) derlediyseniz, başarıyla derlerdi.

+0

Haklısınız James McNellis, hızlı cevap için teşekkürler! – Msum

+0

Cevabı doğruysa, soldaki onay işaretini tıklatarak kabul etmelisiniz. – Alex

+0

Teşekkürler, bunu bilmiyordum. – Msum