2011-06-15 1 views
1

code suivant ne compile en gcc 4.5, mais il n'est pas compilé dans Visual C 2005.c - déclaration après statment, gcc 4.5 vs c visuelle 2005

int main() 
{ 
    int len; 
    len = 32; 
    char buff[len]; 

    return 0; 
} 

Je sais que je déclare tableau après statment, ce qui est contre les règles C ANSI.

Mais pourquoi GCC ne donne pas d'erreur ou d'avertissement, et c visuelle, il donne l'erreur comme,

error C2143: syntax error : missing ';' before 'type' 

des idées?

Merci.

+2

Toujours appeler gcc avec des options '-W -Wall -pedantic', vous verrez probablement beaucoup plus d'informations sur les écarts par rapport aux différentes normes. Combiner avec avec une dose de '-std = ...' pour utiliser/autoriser les extensions du compilateur. –

+0

@Kerrek SB .. Merci pour la réponse .. après avoir utilisé -pedantic, je reçois l'avertissement de GCC ... – mannan

Répondre

2

Votre code C n'est pas conforme à C90. gcc -pedantic va le prévenir.

~/tmp$ gcc -pedantic a.c 
a.c: In function ‘main’: 
a.c:5: warning: ISO C90 forbids variable length array ‘buff’ 
a.c:5: warning: ISO C90 forbids mixed declarations and code 
~/tmp$ 
+0

@ qbert220 .. Merci .. J'ai eu l'idée .. – mannan

0

Le compilateur Visual Studio 2005 ne peut pas gérer l'allocation de tableau dynamique. Essayez char buff[32], cela va fonctionner. C'est une limitation de VS 2005.

+1

C'est une limitation de C89, que VS2005/08/10 a tendance à respecter. – rubenvb