MinGWの3.4.5で-ansiスイッチを使用して問題
質問
私は、GCCで使用されるフラグについて読んで、そしてgcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output
を使用するreccommendationを読みました。私のコードのための品質に関しては、標準それを維持し、それについてのすべての警告を取得します。
さて、-ansiとコンパイルについて...
私は<stdlib.h>
が含まれている場合、gccが私にこのエラーを与えます:
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"
でその行はこれです:
inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }
inline
はCには存在しないのですか? 「標準」ヘッダは、ANSI標準べきではありませんか?私は、インラインを削除するか?(私は本当に今STDLIBに何があるか覚えていないことができます)STDLIB.Hでコンパイルすることは避けてください。
の更新の
アダムは、私は「インライン」は、C89のキーワードではない、とC89は-ansiスイッチで施行されているものであることが判明掲載のリンクを読んでから。私は、私が思う、MinGWのマクロである__inline__
ためにそれを変更しなければならなかった。
助けてくれてありがとう。
解決
これはmingwの既知の問題と思われます。 アーカイブmingwのメーリングリストへのリンクの
これは、インラインC89標準の一部ではない(-ansiはそれを強制されるように)、それは__inline__
に置き換えなければならない指示の代わりに
、誰かが彼がCVSに直接このバグを修正しました通知します。新しいコードをチェックして見て(?)を教えてください。 : - )
他のヒント
インラインはGCC 3.4.5は、ANSI Cであると考えるものの一部ではありません - それはC99の一部であり、私はあなたが使用しているGCCのバージョンを確認することができると思います。
?私は、特定の標準へのコンパイル時に前にこの問題に遭遇しました。私がコンパイルしたLinuxシステムでは、pthreadのは、rwlockヘッダに準拠C99ませんでした(またはでifndef'dされませんでした)。あなたはこれらの場合に注意する必要があり、かつ、プリプロセッサの出力をチェックすることは、時にはこれらの場合に役立つことができます。