gccにstd = c99フラグを追加すると、fileno、F_LOCK、およびF_ULOCKが宣言されず使用できなくなります
質問
Cコードにこれらのヘッダーがあります
#include <stdio.h>
#include <unistd.h>
gccコマンドに-std = c99フラグを追加するまで( restrict )。そして、これは次のエラーを引き起こしました。
警告:の暗黙の宣言 関数
fileno
エラー:
F_LOCK
は宣言されていません(最初の使用 この関数で)
エラー:(各未宣言識別子は 一度だけ報告されたエラー: 関数ごとに表示されます。)
エラー:F_ULOCK
は宣言されていません(最初の使用 この関数で
これらのエラー/警告を回避するためのアイデアはありますか?
解決
ヘッダーにPOSIX拡張が必要であることを伝える必要があります。最近では、次を使用しています:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
-std = c89
でコンパイルしている場合、正しいPOSIXバージョンが提供されます。 -std = c89
でコンパイルすると、正しいPOSIXバージョンが提供されます。 Solaris 9および10、MacOS X(10.4.x、10.5.x)、HP-UX 11.x、Linux(RHEL4および5、SuSE 9および10)およびAIX 5.xおよび6.x-AFAICRでこれを使用します、これまで問題なし。
このスタンザは、システムヘッダーが含まれる前に(独自のヘッダーまたは各ソースファイルに)表示されるか、コンパイラコマンドの -D_XOPEN_SOURCE = 600
で同じ効果を達成する必要があります。行、またはその他の同様のメカニズム。
他のヒント
試用
-std=gnu99
すべての拡張機能を有効にし、引き続きC99言語拡張機能を使用します。
BSD-ismsを有効にするには-D_BSD_SOURCEを、System-V ismsを有効にするには-D_SVID_SOURCEを試してみてください