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

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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top