Question

Je construis une application qui a besoin de compiler sur Windows et Linux. L'application est écrit en C, presque tout fonctionne, sauf le compilateur MinGW refuse cette

typedef struct somestruct{
   ...snip...
   enum {NODE, REAL} type;
};

somestruct* something;
switch (something->type){
 case NODE:
   ...stuff...;
   break;
 case REAL:
   ...otherstuff...;
   break;
}

Il dit NODE et REAL ne sont pas définis, Mais si je fournir une résolution de portée

case somestruct::NODE

Cette compilation avec MinGW 3.4.1, mais ne parvient pas à compiler avec gcc 4.1.2 sur Linux. Est-ce simplement un problème de compilateur qui doit être résolu avec préprocesseurs ou est-il une autre explication?

Était-ce utile?

La solution

Si vous vous débarrasser de l'imbrication, il devrait fonctionner portably:

typedef enum somestruct_type {
    somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
   ...snip...
   somestruct_type type;
} somestruct;

J'ai vu un code très similaire à ce être porté sur un grand nombre de compilateurs C et C.

(je ne dis pas que c'est la seule façon de le faire, je dis simplement que cette façon fonctionne).

Autres conseils

L'application est écrit dans « C », mais les exigences du compilateur que vous faites, ce qui est somestruct::NODE valide « C ++ », mais pas valide « C ».

. Conclusion: vous compilez ce code avec MinGW en mode C ++, mais avec tous les autres compilateurs en mode C

Cause probable:. MinGW ne peut pas traiter et foo.C même foo.c et vos fichiers sont nommés avec un suffixe capital C (ce qui implique C ++ sous UNIX)

Solution: ajoutez drapeau MinGW -xc pour forcer plaine-C compiles

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top