C enum compiladores diferentes
Pergunta
Eu estou construindo um aplicativo que precisa para compilar em Windows e Linux. O aplicativo é escrito em C, quase tudo funciona, exceto o compilador MinGW recusa esta ??p>
typedef struct somestruct{
...snip...
enum {NODE, REAL} type;
};
somestruct* something;
switch (something->type){
case NODE:
...stuff...;
break;
case REAL:
...otherstuff...;
break;
}
Ele diz nó e real não são definidos, Mas se eu fornecer uma resolução de escopo
case somestruct::NODE
Isso compila com MinGW 3.4.1, mas não consegue compilar com gcc 4.1.2 no Linux. Trata-se simplesmente uma questão compilador que precisa ser resolvido com preprocessors ou há alguma outra explicação?
Solução
Se você se livrar do assentamento, ele deve funcionar portably:
typedef enum somestruct_type {
somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
...snip...
somestruct_type type;
} somestruct;
Eu vi código muito semelhante a este ser portado para um grande número de compiladores C e C ++.
(Não estou dizendo que esta é a única maneira de fazê-lo, eu só estou dizendo que dessa maneira obras)
.Outras dicas
O aplicativo é escrito em "C", mas as exigências do compilador que você faz somestruct::NODE
, que é válido "C ++", mas não é válido "C".
Conclusão:. Você está compilando este código com MinGW no modo C ++, mas com todos os outros compiladores no modo C
Causa provável:. MinGW foo.C
não podem tratar e foo.c
o mesmo, e seus arquivos são nomeados com um sufixo de capital C (o que implica C ++ no UNIX)
Solução:. Flag -xc
add para MinGW para forçar compila plain-C