質問

私は、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されませんでした)。あなたはこれらの場合に注意する必要があり、かつ、プリプロセッサの出力をチェックすることは、時にはこれらの場合に役立つことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top