kazmax - Linux で自宅サーバー

feature_test_macros - 約束事その他の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 準拠
  5. 注意

名前

feature_test_macros - 機能検査マクロ

書式

#include <features.h>

説明

機能検査マクロ (feature test macro) により、プログラマは プログラムがコンパイルされる際にシステムのヘッダファイルにより 公開される定義を制御することができる。 この機能を使うと、非標準の定義が公開されないようにでき、 移植性のあるアプリケーションを作成するのに役立つ。 他のマクロを使うと、デフォルトでは公開されない非標準の定義を 公開することができる。 以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、 ヘッダファイル <features.h>を調べればよい。
機能検査マクロを機能させるには、 「あらゆるヘッダファイルをインクルードする前に」 機能検査マクロを定義しなければならない。 これを実現するには、 コンパイルコマンドで指定する方法 (cc -DMACRO=value)と、ソースコードであらゆるヘッダをインクルードする前に 必要なマクロを定義する方法がある。
Linux/glibc は以下の機能検査マクロを解釈する:

_POSIX_C_SOURCE
このマクロを値 1 で定義すると、ヘッダファイルで POSIX.1-1990 と ISO C (1990) に準拠する定義が公開される。 199309 以上の値で定義すると、 POSIX.1b (リアルタイム拡張) 関連の定義が追加で公開される。 199506 以上の値で定義すると、 POSIX.1c (スレッド) 関連の定義が追加で公開される。 値 200112 で定義すると、(XSI 拡張を除く) POSIX.1-2001 基本仕様に 対応する定義が公開される。
_POSIX_SOURCE
このマクロは廃止予定である。 このマクロが定義されると、値に関わらず、 _POSIX_C_SOURCEを値 1 で定義するのと等価となる。
_XOPEN_SOURCE
このマクロを定義すると、どんな値でも、ヘッダファイルで POSIX.1, POSIX.2, XPG4 に準拠する定義が公開される。 500 以上の値で定義すると、SUSv2 (UNIX 98) 関連の定義が 追加で公開される。 600 以上の値で定義すると、 SUSv3 (UNIX 03; POSIX.1-2001 基本仕様 + XSI 拡張と同じ) 関連の定義と C 99 での定義が追加で公開される。
_XOPEN_SOURCE_EXTENDED
このマクロが値 1 で定義され、さらに _XOPEN_SOURCEが定義されていると、XPG4v2 UNIX 拡張に対応する定義が公開される。
_ISOC99_SOURCE
ISO C (1990) の C 99 拡張を公開する。
_LARGEFILE64_SOURCE
LFS (Large File Summit) により "暫定拡張 (transitional extension)" Single UNIX Specification として規定された代替 API に関する定義を公開する (http://ftp.sas.com/standards/large.file/ 参照)。
_FILE_OFFSET_BITS
このマクロを値 64 で定義すると、ファイル I/O とファイルシステム操作に 関連する 32 ビット版の関数とデータタイプは自動的に 64ビット版に 変換される。 これは、32ビットシステムで大きなファイル (> 2ギガバイト) の I/O を実行する際に役立つ。
_BSD_SOURCE
このマクロを定義すると (値に関わらず) ヘッダファイルで BSD 由来の定義が公開される。 また、このマクロを定義すると、相容れない標準が存在する状況において BSD 由来の定義を優先するようになる。
_SVID_SOURCE
このマクロを定義すると (値に関わらず) ヘッダファイルで System V 由来の定義が公開される (SVID == System V Interface Definition; standards(7)参照)。
_GNU_SOURCE
このマクロを定義すると (値に関わらず) 以下のマクロを定義するのと 等価になる: _BSD_SOURCE,_SVID_SOURCE,_LARGEFILE64_SOURCE,_ISOC99_SOURCE,値 1999506 の _POSIX_C_SOURCE値 600 の _XOPEN_SOURCE。さらに、各種の GNU 固有の拡張も公開される。

 gcc(1) が起動されると、デフォルトで _BSD_SOURCE,_SVID_SOURCE,_POSIX_SOURCE,POSIX_C_SOURCE=199506が定義される。 個々のマクロが定義されると、明示的に定義された場合を除き 他のマクロは無効となる。(例外: POSIX_C_SOURCEが他で定義されていない場合には、 POSIX_C_SOURCEは常に値 199506 で定義される。 但し、コンパイラが使用する標準を指定するモードで起動された場合 (-std=c99フラグ) はこの限りではない。

準拠

POSIX.1 では _POSIX_C_SOURCE,_POSIX_SOURCE,_XOPEN_SOURCEが規定されている。 _XOPEN_SOURCE_EXTENDEDは XPG4v2 (別名 SUSv1) で規定されていた。 _FILE_OFFSET_BITSはどの標準でも規定されていないが、 他のいくつかの実装で採用されている。 _BSD_SOURCE,_SVID_SOURCE,_GNU_SOURCEは Linux (glibc) 固有である。

注意

<features.h>は Linux/glibc 固有のヘッダファイルである。 他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。 このヘッダファイルは、他のヘッダファイルにより必要に応じて 自動的にインクルードされる。機能検査マクロを利用するために 明示的にインクルードする必要はない。