problemas usando o interruptor -ANSI em MinGW 3.4.5
Pergunta
Eu estava lendo sobre as bandeiras usadas no gcc, e ler um reccommendation ao uso gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output
. Para a qualidade de amor do meu código, para mantê-lo padrão, e obter todas as advertências sobre isso.
Bem, sobre a compilação com -ANSI ...
Se eu incluir <stdlib.h>
, gcc me dá esse erro:
In file included from ansi.c:2:
C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317: error: syntax error before "double"
Essa linha nos é esta:
inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }
não inline
não existe no C? um cabeçalho "padrão" não deve ser ansi padrão? Devo apenas remover a linha ou evitar compilar com stdlib.h (eu não consigo me lembrar o que está em stdlib agora)?
Atualizar
a partir da leitura do link que Adam postado eu descobri que "inline" não é uma palavra-chave no C89 e C89 é o que é reforçado com o interruptor -ANSI. Eu tive que mudá-lo para __inline__
que é, suponho, um macro MinGW.
Obrigado pela ajuda.
Solução
Parece um problema conhecido no mingw: link para lista de discussão mingw arquivo
Ele diz que em linha não é parte do padrão c89 (como força -ANSI-lo) e deve ser substituído por __inline__
vez
Se você ler próximos e-mails, alguém diz que ele tem corrigir esse bug diretamente nas cvs. Confira o novo código e ter um olhar (?), Então nos dizer. : -)
Outras dicas
linha não é parte do que gcc 3.4.5 considera ser ANSI C? - é parte do C99, acho que você pode confirmar a versão do gcc você estiver usando
Eu executar para esse problema antes, quando compilar a um padrão específico. Em um sistema Linux que eu estava compilando a, os cabeçalhos rwlock pthread não eram compatíveis c99 (ou não foram ifndef'd in). Você tem que ter cuidado nestes casos, e verificar a saída do pré-processador às vezes podem ajudar nesses casos.