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.

Foi útil?

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.

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