OVH Cloud OVH Cloud

Compiler du C avec VC++

11 réponses
Avatar
Korchkidu
Bonjour,

je dois compiler du C avec VC++. J'ai deja un projet qui compile sans
probleme. Malheureusement, pour le 2e, rien ne va plus (alors que les
parametres sont exactement les memes). Il me sort une erreur sur FILE
*history_file:

inout.c(25) : error C2275: 'FILE' : illegal use of this type as an
expression

J'ai verifier les code precompiler et FILE est correctement defini avant
dans le fichier.

Si qq1 a la moindre piste car la je seche un peu.
Mercille,
K.
PS: ce projet compile parfaitement sur Solaris avec gcc...

10 réponses

1 2
Avatar
AMcD®
Sans exemple de code, on aura du mal à t'aider...

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Korchkidu
AMcD® wrote:

Sans exemple de code, on aura du mal à t'aider...



C'est parceque je pense que le probleme ne vient pas du code mais bien
d'un truc connu que je ne connais pas....
Voici la ligne qui pose pb:
FILE *history_file;
et voici l'erreur associee:
inout.c(25) : error C2275: 'FILE' : illegal use of this type as an
expression

Merci pour tout aide,
K.
Avatar
Korchkidu
Korchkidu wrote:

AMcD® wrote:

Sans exemple de code, on aura du mal à t'aider...



C'est parceque je pense que le probleme ne vient pas du code mais bien
d'un truc connu que je ne connais pas....
Voici la ligne qui pose pb:
FILE *history_file;
et voici l'erreur associee:
inout.c(25) : error C2275: 'FILE' : illegal use of this type as an
expression

Merci pour tout aide,
K.


Je viens de trouver le probleme. Le compilateur C de VC++ doit se baser
sur le C89...

K.
Avatar
Pierre Maurette
Korchkidu, le 17/06/2005, a écrit :
Korchkidu wrote:

AMcD® wrote:

Sans exemple de code, on aura du mal à t'aider...



C'est parceque je pense que le probleme ne vient pas du code mais bien d'un
truc connu que je ne connais pas....
Voici la ligne qui pose pb:
FILE *history_file;
et voici l'erreur associee:
inout.c(25) : error C2275: 'FILE' : illegal use of this type as an
expression

Merci pour tout aide,
K.


Je viens de trouver le probleme. Le compilateur C de VC++ doit se baser sur
le C89...


Je n'en suis pas convaincu.
Il existe un bug qui provoque cette erreur (FILE serait un typedef):
http://support.microsoft.com/kb/166513/EN-US/
Quelle version de VC++ ? (le mieux est de l'indiquer systématiquement
dans les questions de ce genre).
Êtes-vous certain de compiler en C et non en C++ ? Ligne de commande ?

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette
Avatar
korchkidu
Pierre Maurette wrote:

Je n'en suis pas convaincu.
Il existe un bug qui provoque cette erreur (FILE serait un typedef):
http://support.microsoft.com/kb/166513/EN-US/


En fait l'erreur se produisait la mais venait de plus haut. Si je
regroupe toutes les declarations de variables en debut de bloc alors ca
marche super..

Quelle version de VC++ ? (le mieux est de l'indiquer systématiquement
dans les questions de ce genre).


VC 2003

Êtes-vous certain de compiler en C et non en C++ ?


oui.
Avatar
Dominique Vaufreydaz
Bonjour,

En fait l'erreur se produisait la mais venait de plus haut. Si je
regroupe toutes les declarations de variables en debut de bloc alors
ca marche super..



En C, toutes les variables doivent etre en debut de bloc. Pas en C++.

Êtes-vous certain de compiler en C et non en C++ ?


oui.



Donc c'est normal. Doms.
Avatar
Korchkidu
Dominique Vaufreydaz wrote:
Bonjour,

En C, toutes les variables doivent etre en debut de bloc. Pas en C++.


Non. Ceci n'est justement vrai que en C89. En C99 par contre, on peut
declarer ses variables ou l'on veut. D'ou ma conclusion que VC++ devait
utiliser C89 et non C99...

Donc c'est normal. Doms.


Pas vraiment. Pourquoi ne pas utiliser le C99?

K.
Avatar
Dominique Vaufreydaz
Bonjour,

Non. Ceci n'est justement vrai que en C89. En C99 par contre, on peut
declarer ses variables ou l'on veut. D'ou ma conclusion que VC++
devait utiliser C89 et non C99...



J'admets ne pas connaitre les suptilités de la chose, et je m'en excuse.
Notons aussi que la déclaration de variables dans le code n'a rellement
d'interet que pour appeler les constructeurs des classes... Sinon, il est
toujorus possible d'ouvrir un bloc pour faire ca. Bref.

Donc c'est normal. Doms.


Pas vraiment. Pourquoi ne pas utiliser le C99?



Je dirais parceque... Notons que gcc aussi cumule certains approximations
de la norme C++. Et que pour avoir un code propre et portable,
le compiler sans erreur dans les 2 environnements n'est pas vraiment du lux.

BRef, ni gcc, ni Visual ne supporte 100% des normes. Ils ne supportent d'ailleurs
pas les meme parties de la norme... Donc, perso je dirais que c'est by design !
En gros, si je veux ecrire qqchose de portable, je fais en sortent que ca compile
sous les 2 environnements et je ne me dis pas que c'est de la faute de gcc s'il compile
pas ca ou ca qui est dans la norme (et inversement bien sur). Les 2 outils sont
imparfait au sens du respect de la norme, il va falloir faire comme moi : faire avec.

Donc je reitere mon : c'est normal (au sens de c'est comme ca).
Bien entendu, moi aussi je reve que les 2 supportent a 100% la norme.
Ca serait tellement plus simple...

Doms.
Avatar
Cyrille Szymanski
"Dominique Vaufreydaz" wrote in
news:d961k8$5eg$:

BRef, ni gcc, ni Visual ne supporte 100% des normes.



D'ailleurs c'est ce que l'on dit toujours, mais presque personne ne sait
donner des exemples de différences avec la norme.

Franchement pour C89 je ne sais pas, et je pense qu'il faut rentrer dans
des cas vraiment tordus pour voir les limites.

Pour C99 par contre je peux citer : (parmi les choses piquées au C++, donc
ce qu'on pourrait penser portable mais qui ne l'est pas) les inline, les
tableaux de taille variable, (parmi les choses qui m'intéressaient
spécifiquement dans le C89) les complexes et les choses de math.h

--
Cyrille Szymanski
Avatar
Korchkidu
Dominique Vaufreydaz wrote:
Bonjour,

J'admets ne pas connaitre les suptilités de la chose, et je m'en excuse.
Notons aussi que la déclaration de variables dans le code n'a rellement
d'interet que pour appeler les constructeurs des classes...



Je parle de C en fait ici...

Je dirais parceque... Notons que gcc aussi cumule certains approximations
de la norme C++.



Je ne parle pas de respect de la norme ni de C++...
Je m'interroge juste sur le fait de savoir si cl utilise bien le C89 ou
C99. Pour moi il est assez evident qu'il utilise le C89 pour compiler du
C puisqu'il n'accepte les declarations de variables uniquement au debut
d'un bloc...


BRef, ni gcc, ni Visual ne supporte 100% des normes.



Rien a voir avec mon interrogation. Ceci est une tout autre question qui
a deja ete debattue ici je pense....longuement et souvent a mon avis...

Ils ne supportent d'ailleurs
pas les meme parties de la norme... Donc, perso je dirais que c'est by design !
En gros, si je veux ecrire qqchose de portable, je fais en sortent que ca compile
sous les 2 environnements et je ne me dis pas que c'est de la faute de gcc s'il compile
pas ca ou ca qui est dans la norme (et inversement bien sur). Les 2 outils sont
imparfait au sens du respect de la norme, il va falloir faire comme moi : faire avec.


Rien a voir avec mon interrogation...

Donc je reitere mon : c'est normal (au sens de c'est comme ca).
Bien entendu, moi aussi je reve que les 2 supportent a 100% la norme



Rien a voir avec mon interrogation...;)

K.
1 2