gccにstd = c99フラグを追加すると、fileno、F_LOCK、およびF_ULOCKが宣言されず使用できなくなります

StackOverflow https://stackoverflow.com/questions/1423185

  •  07-07-2019
  •  | 
  •  

質問

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を試してみてください

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