名 前
feature_test_macros − 機 能 検 査 マ ク ロ
書 式
#include <features.h>
説 明
機 能 検 査 マ ク ロ (feature test macro) に よ り 、 プ ロ グ ラ マ は プ ロ グ ラ ム が コ ン パ イ ル さ れ る 際 に シ ス テ ム の ヘ ッ ダ ー フ ァ イ ル に よ り 公 開 さ れ る 定 義 を 制 御 す る こ と が で き る 。 注 意 : 機 能 検 査 マ ク ロ を 機 能 さ せ る に は 、 機 能 検 査 マ ク ロ の 定 義 を 「 ど の ヘ ッ ダ ー フ ァ イ ル の イ ン ク ル ー ド よ り も 前 で 」 行 わ な け れ ば な ら な い 。 こ れ を 実 現 す る に は 、 コ ン パ イ ル コ マ ン ド で 指 定 す る 方 法 (cc −DMACRO=value) と 、 ソ ー ス コ ー ド 内 で 必 要 な マ ク ロ の 定 義 を ど の ヘ ッ ダ ー の イ ン ク ル ー ド よ り も 前 で 行 う 方 法 が あ る 。 機 能 検 査 マ ク ロ を 使 う と 、 非 標 準 の 定 義 が 公 開 さ れ な い よ う に で き 、 移 植 性 の あ る ア プ リ ケ ー シ ョ ン を 作 成 す る の に 役 立 つ 。 他 の マ ク ロ を 使 う と 、 デ フ ォ ル ト で は 公 開 さ れ な い 非 標 準 の 定 義 を 公 開 す る こ と が で き る 。 以 下 で 説 明 す る 機 能 検 査 マ ク ロ の そ れ ぞ れ の 正 確 な 影 響 を 確 認 す る に は 、 ヘ ッ ダ ー フ ァ イ ル <features.h> を 調 べ れ ば よ い 。 マ ニ ュ ア ル ペ ー ジ で の 機 能 検 査 マ ク ロ の 要 件 の 規 定 関 数 が 機 能 検 査 マ ク ロ の 定 義 を 必 要 と す る 場 合 、 マ ニ ュ ア ル ペ ー ジ の 書 式 (SYNOPSIS) の 節 に 以 下 の 形 式 の 注 釈 を 入 れ る (以 下 の 例 は acct(2) の マ ニ ュ ア ル ペ ー ジ か ら の 引 用 で あ る )。
#include <unistd.h>
int acct(const char *filename);
glibc 向
け の 機 能 検 査
マ ク ロ の 要 件
(feature_test_macros(7) 参 照
):
acct(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
|| は 、 acct(2) の 定 義 を <unistd.h> か ら 得 る に は 、 以 下 の マ ク ロ の 定 義 の い ず れ か を 、 ど の ヘ ッ ダ ー フ ァ イ ル の イ ン ク ル ー ド よ り も 前 で 行 わ な け れ ば な ら な い こ と を 意 味 す る 。
#define
_BSD_SOURCE
#define _XOPEN_SOURCE /* 500 未 満 の
任 意 の 値 */ 別 の
方 法 と し て は
、 等 価 な 定 義
を コ ン パ イ ル
用 の コ マ ン ド
で 指 定 す る こ
と も で き る 。
cc
−D_BSD_SOURCE
cc −D_XOPEN_SOURCE # 500 未 満 の
任 意 の 値 後 で
述 べ る が 、 「
い く つ か の 機
能 検 査 マ ク ロ
は デ フ ォ ル ト
で 定 義 さ れ る
」 点 に 注 意 す
る こ と 。 こ の
た め 、 「 書 式
」 に 記 載 さ れ
た 機 能 検 査 マ
ク ロ を 常 に 明
示 的 に 指 定 す
る 必 要 が あ る
わ け で は な い
。 あ ま り 多 く
な い が 、 マ ニ
ュ ア ル ペ ー ジ
に よ っ て は 、
機 能 検 査 マ ク
ロ の 要 件 を 以
下 の よ う に 簡
単 な 表 現 で 記
載 す る 場 合 が
あ る 。 (以 下 の
例 は readahead(2) の マ
ニ ュ ア ル ペ ー
ジ か ら の 引 用
で あ る )。
#define
_GNU_SOURCE
#include <fcntl.h>
ssize_t readahead(int fd, off64_t *offset, size_t count); 関 数 定 義 の 公 開 に 使 え る 機 能 検 査 マ ク ロ が 一 つ だ け で 、 デ フ ォ ル ト で は そ の マ ク ロ が 定 義 さ れ な い 場 合 に 、 こ の 形 式 の 表 現 を 利 用 す る 。
glibc が 解 釈 す る 機 能 検 査 マ ク ロ 以 下 で は 、 Linux glibc 2.x (x > 0) に お い て 、 機 能 検 査 マ ク ロ が ど の よ う に 扱 わ れ る か を 説 明 す る 。
Linux/glibc
は 以 下 の 機 能
検 査 マ ク ロ を
解 釈 す る :
__STRICT_ANSI__
ISO 標 準 の C。 gcc(1) を −std=c99 や −ansi な ど の フ ラ グ を 付 け て 起 動 し た 場 合 、 こ の マ ク ロ は 暗 黙 の う ち に 定 義 さ れ る 。
_POSIX_C_SOURCE こ の マ ク ロ を 定 義 す る と 、 ヘ ッ ダ ー フ ァ イ ル で 以 下 の 定 義 が 公 開 さ れ る 。
• 値 が |
1 の 場 合 、 POSIX.1−1990 と ISO C (1990) に 準 拠 す る 定 義 が |
公 開 さ れ る 。
• 値 が |
2 以 上 の 場 合 、 POSIX.2−1992 関 連 の 定 義 も 追 加 で 公 開 さ れ |
る 。
• 値 が |
199309 以 上 の 場 合 、 POSIX.1b (リ ア ル タ イ ム 拡 張 ) 関 連 の 定 |
義 が 追 加 で 公 開 さ れ る 。
• 値 が |
199506 以 上 の 場 合 、 POSIX.1c (ス レ ッ ド ) 関 連 の 定 義 が 追 加 |
で 公 開 さ れ る 。
• |
(glibc 2.3.3 以 降 ) 値 が 200112L 以 上 の 場 合 、 (XSI 拡 張 を 除 く ) POSIX.1−2001 基 本 仕 様 に 対 応 す る 定 義 も 追 加 で 公 開 さ れ 、 ま た C95 (glibc 2.12 以 降 ) と C99 (glibc 2.10 以 降 ) の 機 能 も 公 開 さ れ る 。 | ||
• |
(glibc 2.10 以 降 ) 値 が 200809L 以 上 の 場 合 、 (XSI 拡 張 を 除 く ) POSIX.1−2008 基 本 仕 様 に 対 応 す る 定 義 が 追 加 で 公 開 さ れ る 。 |
_POSIX_SOURCE こ
の マ ク ロ は 廃
止 予 定 で あ る
。 こ の マ ク ロ
が 定 義 さ れ る
と 、 値 に 関 わ
ら ず 、 _POSIX_C_SOURCE を
値 1 で 定 義 す る
の と 等 価 と な
る 。
_XOPEN_SOURCE こ の マ ク
ロ を 定 義 す る
と 、 ヘ ッ ダ ー
フ ァ イ ル で 以
下 の 定 義 が 公
開 さ れ る 。
• ど ん な 値 で も 、 ヘ ッ ダ ー フ ァ イ ル で |
POSIX.1, POSIX.2, XPG4 に 準 |
拠 す る 定 義 が 公 開 さ れ る 。
• 値 が |
500 以 上 の 場 合 、 SUSv2 (UNIX 98) 関 連 の 定 義 が 追 加 で 公 開 |
さ れ る 。
• |
(glibc 2.2 以 降 ) 値 が 600 以 上 の 場 合 、 SUSv3 (UNIX 03; POSIX.1−2001 基 本 仕 様 + XSI 拡 張 と 同 じ ) 関 連 の 定 義 と C99 で の 定 義 が 追 加 で 公 開 さ れ る 。 | ||
• |
(glibc 2.10 以 降 ) 値 が 700 以 上 の 場 合 、 SUSv4 (POSIX.1−2008 基 本 仕 様 + XSI 拡 張 と 同 じ ) 関 連 の 定 義 が 追 加 で 公 開 さ れ る 。 |
__STRICT_ANSI__ が 定 義 さ れ て い な い 場 合 、 ま た は _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 さ れ て い て 、 _POSIX_SOURCE も _POSIX_C_SOURCE も 明 示 的 に 定 義 さ れ て い な い 場 合 、 以 下 の マ ク ロ が 暗 黙 の う ち に 定 義 さ れ る 。
• |
_POSIX_SOURCE が 値 1 で 定 義 さ れ る 。 | ||
• |
_POSIX_C_SOURCE は 、 _XOPEN_SOURCE の 値 に 基 づ い て 定 義 さ れ る 。 |
_XOPEN_SOURCE < 500
_POSIX_C_SOURCE が 値 2 で 定 義 さ れ る 。
500 <= _XOPEN_SOURCE < 600
_POSIX_C_SOURCE が 値 199506L で 定 義 さ れ る 。
600 <= _XOPEN_SOURCE < 700
_POSIX_C_SOURCE が 値 200112L で 定 義 さ れ る 。
700 <= _XOPEN_SOURCE (glibc 2.10 以 降 )
_POSIX_C_SOURCE が 値 200809L で 定 義 さ れ る 。
_XOPEN_SOURCE_EXTENDED
こ の マ ク ロ が
定 義 さ れ 、 さ
ら に _XOPEN_SOURCE が 定
義 さ れ て い る
と 、 XPG4v2 (SUSv1) UNIX 拡 張
(UNIX 95) に 対 応 す る
定 義 が 公 開 さ
れ る 。 _XOPEN_SOURCE が 500
以 上 の 値 で 定
義 さ れ た 場 合
、 こ の マ ク ロ
は 暗 黙 の う ち
に 定 義 さ れ る
。
_ISOC99_SOURCE (glibc 2.1.3 以 降 )
ISO C99 標 準 に 準 拠 し た 宣 言 を 公 開 す る 。 初 期 の バ ー ジ ョ ン 2.1.x の glibc で は 、 こ れ と 等 価 な _ISOC9X_SOURCE と い う 名 前 の マ ク ロ が 使 わ れ て い た (な ぜ な ら 、 C99 標 準 は ま だ 確 定 し て い な か っ た か ら で あ る )。 _ISOC9X_SOURCE マ ク ロ の 使 用 は 廃 止 さ れ て い る が 、 glibc は 過 去 と の 互 換 性 の た め 今 で も こ の マ ク ロ を 認 識 す る 。
_ISOC99_SOURCE を 定 義 す る と 、 ISO C (1990) Amendment 1 ("C95") の 定 義 も 公 開 さ れ る (C95 で の 主 要 な 変 更 点 は 国 際 化 文 字 集 合 の サ ポ ー ト で あ っ た )。
_ISOC11_SOURCE (glibc 2.16 以 降 )
ISO C11 標 準 に 準 拠 し た 宣 言 を 公 開 す る 。 こ の マ ク ロ を 定 義 す る と (_ISOC99_SOURCE 同 様 ) C99 と C95 の 機 能 も 有 効 に な る 。
_LARGEFILE64_SOURCE
LFS (Large File Summit) に よ り "暫 定 拡 張 (transitional extension)" Single UNIX Specification と し て 規 定 さ れ た 代 替 API (alternative API) に 関 す る 定 義 を 公 開 す る ( http://opengroup.org/platform/lfs.html">http://opengroup.org/platform/lfs.html 参 照 )。 代 替 API は 新 規 オ ブ ジ ェ ク ト (関 数 と 型 ) の 集 合 で 構 成 さ れ 、 そ の 名 前 は "64" で 終 わ る (例 え ば 、 off_t に 対 応 す る の は off64_t、 lseek() に 対 応 す る の は lseek64() で あ る )。 新 し い プ ロ グ ラ ム で は こ の マ ク ロ を 利 用 し な い こ と 。 代 わ り に _FILE_OFFSET_BITS=64 を 利 用 す る こ と 。
_LARGEFILE_SOURCE
こ の マ ク ロ は
、 歴 史 的 に は
、 フ ァ イ ル オ
フ セ ッ ト で long int
を 使 う 以 前 の API
(fseek(3) や ftell(3)) の 制
限 を 解 決 す る
関 数 (特 に fseeko(3)
と ftello(3)) を 公 開
す る の に 使 わ
れ て い た 。 こ
の マ ク ロ は
_XOPEN_SOURCE が 500 以 上 の
値 で 定 義 さ れ
て い る 場 合 に
暗 黙 の う ち に
定 義 さ れ る 。
新 し い プ ロ グ
ラ ム で ぇ あ こ
の マ ク ロ は 使
用 す べ き で は
な い 。 _XOPEN_SOURCE を
た だ 定 義 す る
か 、 _FILE_OFFSET_BITS を 値
64 で 定 義 す る の
が 、 同 じ 結 果
を 得 る た め の
推 奨 さ れ る 方
法 で あ る 。
_FILE_OFFSET_BITS こ の マ ク
ロ を 値 64 で 定 義
す る と 、 フ ァ
イ ル I/O と フ ァ イ
ル シ ス テ ム 操
作 に 関 連 す る 32
ビ ッ ト 版 の 関
数 と デ ー タ タ
イ プ は 自 動 的
に 64 ビ ッ ト 版 に
変 換 さ れ る 。
こ れ は 、 32 ビ ッ
ト シ ス テ ム で
大 き な フ ァ イ
ル (> 2 ギ ガ バ イ
ト ) の I/O を 実 行 す
る 際 に 役 立 つ
(こ の マ ク ロ を
定 義 す る と 、
コ ン パ イ ル し
直 す だ け で 大
き な フ ァ イ ル
を 扱 え る プ ロ
グ ラ ム を 書 く
こ と が で き る
)。
64 ビ ッ ト シ ス テ ム は 、 も と も と 2 ギ ガ バ イ ト よ り 大 き な フ ァ イ ル を 扱 え る の で 、 64 ビ ッ ト シ ス テ ム で は こ の マ ク ロ は 効 果 を 持 た な い 。
_BSD_SOURCE (glibc 2.20 以 降 で は 非 推 奨 ) こ の マ ク ロ を 定 義 す る と 、 値 に 関 わ ら ず 、 ヘ ッ ダ ー フ ァ イ ル で BSD 由 来 の 定 義 が 公 開 さ れ る 。 バ ー ジ ョ ン 2.18 以 前 の glibc で は 、 こ の マ ク ロ を 定 義 す る と 、 相 容 れ な い 標 準 が 存 在 す る 状 況 に お い て BSD 由 来 の 定 義 を 優 先 す る よ う に な る 。 た だ し 、 _SVID_SOURCE, _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _GNU_SOURCE が 一 つ で も 定 義 さ れ た 場 合 に は 、 BSD 由 来 の 定 義 は 優 先 さ れ な く な る 。 glibc 2.19 以 降 で は 、 _BSD_SOURCE を 定 義 し て も 相 容 れ な い 標 準 が あ っ て も BSD 由 来 の 定 義 が 優 先 さ れ る こ と は も は や な く な っ た 。
glibc 2.20 以 降 で は 、 こ の マ ク ロ は 非 推 奨 で あ る 。 こ の マ ク ロ は 現 在 は _DEFAULT_SOURCE を 定 義 す る の と 同 じ 効 果 を 持 つ が 、 (_DEFAULT_SOURCE が 合 わ せ て 定 義 さ れ て い な い 場 合 に は ) コ ン パ イ ル 時 の 警 告 が 出 る 。 代 わ り に _DEFAULT_SOURCE を 使 用 す る こ と 。 glibc 2.19 以 前 で _BSD_SOURCE が 必 要 で glibc 2.20 以 降 で _DEFAULT_SOURCE を 必 要 と す る プ ロ グ ラ ム を 警 告 を 出 さ ず に コ ン パ イ ル す る に は 、 _BSD_SOURCE と _DEFAULT_SOURCE の 両 方 を 定 義 す る こ と 。
_SVID_SOURCE (glibc 2.20 以 降 で は 非 推 奨 ) こ の マ ク ロ を 定 義 す る と (値 に 関 わ ら ず ) ヘ ッ ダ ー フ ァ イ ル で System V 由 来 の 定 義 が 公 開 さ れ る (SVID == System V Interface Definition; standards(7) 参 照 )。
glibc 2.20 以 降 、 _BSD_SOURCE と 同 様 に こ の マ ク ロ は 非 推 奨 と な っ て い る 。
_DEFAULT_SOURCE (glibc 2.19 以 降 ) こ の マ ク ロ を 使 う と 、 「 デ フ ォ ル ト 」 が 無 効 に な る よ う な 場 合 で も 「 デ フ ォ ル ト 」 の 定 義 が 提 供 さ れ る よ う に す る こ と が で き る 。 「 デ フ ォ ル ト 」 が 無 効 に な る よ う な 状 況 は 、 個 別 の マ ク ロ が 明 示 的 に 定 義 さ れ た 場 合 や 、 コ ン パ イ ラ が 「 標 準 」 モ ー ド の い ず れ か (例 え ば cc −std=c99) で 起 動 さ れ た 場 合 な ど で あ る 。 他 の 個 々 の マ ク ロ が 定 義 さ れ ず 、 コ ン パ イ ラ も 「 標 準 」 モ ー ド の い ず れ か を 指 定 し て 起 動 さ れ て い な い 場 合 は 、 _DEFAULT_SOURCE を 定 義 し て も 何 の 効 果 も な い 。 「 デ フ ォ ル ト 」 定 義 は 、 POSIX.1−2008 で 必 須 と な っ て い る 定 義 と 、 BSD と System V 由 来 の 種 々 の 定 義 を 公 開 す る 。 glibc 2.19 以 前 で は 、 こ れ ら の デ フ ォ ル ト は 以 下 を 明 示 的 に 定 義 す る の と ほ ぼ 等 価 で あ る 。
cc −D_BSD_SOURCE −D_SVID_SOURCE −D_POSIX_C_SOURCE=200809
_ATFILE_SOURCE (glibc
2.4 以 降 ) こ の マ ク
ロ を 定 義 す る
と (値 に 関 わ ら
ず ) ヘ ッ ダ ー フ
ァ イ ル で 名 前
の 末 尾 が "at" の
各 種 の 関 数 の
定 義 が 公 開 さ
れ る 。 openat(2) 参
照 。 glibc 2.10 以 降 で
は 、 _POSIX_C_SOURCE が 200809L
以 上 の 値 で 定
義 さ れ た 場 合
に は 、 こ の マ
ク ロ も 暗 黙 の
う ち に 定 義 さ
れ る 。
_GNU_SOURCE こ の マ ク ロ
を 定 義 す る と
(値 に 関 わ ら ず )
以 下 の マ ク ロ
が 暗 黙 の う ち
に 定 義 さ れ る :
_ATFILE_SOURCE, _LARGEFILE64_SOURCE,
_ISOC99_SOURCE, _XOPEN_SOURCE_EXTENDED,
_POSIX_SOURCE, 値 200809L の
_POSIX_C_SOURCE (バ ー ジ ョ
ン 2.10 よ り 前 の glibc
で は 値 は 200112L、 バ
ー ジ ョ ン 2.5 よ り
前 の glibc で は 値 は
199506L、 バ ー ジ ョ ン
2.1 よ り 前 の glibc で
は 値 は 199309L), 値 700 の
_XOPEN_SOURCE (バ ー ジ ョ
ン 2.10 よ り 前 の glibc
で は 値 は 600、 バ
ー ジ ョ ン 2.2 よ り
前 の glibc で は 値 は
500)。
glibc 2.19 以 降 で は 、 _GNU_SOURCE を 定 義 す る と 、 _DEFAULT_SOURCE も 暗 黙 の う ち に 定 義 さ れ る 。 バ ー ジ ョ ン 2.20 よ り 前 の glibc で は 、 _GNU_SOURCE を 定 義 す る と 、 _BSD_SOURCE と _SVID_SOURCE も 暗 黙 の う ち に 定 義 さ れ て い た 。
_REENTRANT こ
の マ ク ロ を 定
義 す る と 、 い
く つ か の リ エ
ン ト ラ ン ト (再
入 可 能 ) な 関 数
定 義 が 公 開 さ
れ る 。 マ ル チ
ス レ ッ ド プ ロ
グ ラ ム で は 、
こ の 代 わ り に
cc −pthread を 使 用
す る こ と 。
_THREAD_SAFE
_REENTRANT の 同 義 語 。 他 の い く つ か の 実 装 と の 互 換 性 を 提 供 す る た め の も の 。
_FORTIFY_SOURCE (glibc 2.3.4 以 降 ) こ の マ ク ロ を 定 義 す る と 、 文 字 列 や メ モ リ ー の 操 作 を 行 う 様 々 な 関 数 を 使 用 す る 際 に バ ッ フ ァ ー オ ー バ ー フ ロ ー を 検 出 す る た め の 軽 め の チ ェ ッ ク が 実 行 さ れ る よ う に な る 。 す べ て の バ ッ フ ァ ー オ ー バ ー フ ロ ー が 検 出 さ れ る わ け で は な く 、 あ く ま で よ く あ る 例 に つ い て だ け で あ る 。 つ い て だ け で あ る 。 現 在 の 実 装 で は 、 以 下 の 関 数 に チ ェ ッ ク が 追 加 さ れ て い る : memcpy(3), mempcpy(3), memmove(3), memset(3), stpcpy(3), strcpy(3), strncpy(3), strcat(3), strncat(3), sprintf(3), snprintf(3), vsprintf(3), vsnprintf(3), gets(3)
_FORTIFY_SOURCE が 1 に 設 定 さ れ た 場 合 、 コ ン パ イ ラ の 最 適 化 レ ベ ル が 1 (gcc −O1) か そ れ 以 上 で あ れ ば 、 規 格 に 準 拠 す る プ ロ グ ラ ム の 振 る 舞 い を 変 化 さ せ な い よ う な チ ェ ッ ク が 実 行 さ れ る 。 _FORTIFY_SOURCE が 2 に 設 定 さ れ た 場 合 、 さ ら な る チ ェ ッ ク が 追 加 さ れ る が 、 規 格 に 準 拠 す る プ ロ グ ラ ム の い く つ か が 失 敗 す る 可 能 性 が あ る 。 い く つ か の チ ェ ッ ク は コ ン パ イ ル 時 に 実 行 で き 、 コ ン パ イ ラ の 警 告 と し て 表 示 さ れ る 。 他 の チ ェ ッ ク は 実 行 時 に 行 わ れ 、 チ ェ ッ ク に 失 敗 し た 場 合 に は 実 行 時 エ ラ ー と な る 。 こ の マ ク ロ を 使 用 す る に は コ ン パ イ ラ の 対 応 が 必 要 で あ り 、 バ ー ジ ョ ン 4.0 以 降 の gcc(1) で 利 用 で き る 。 デ フ ォ ル ト の 定 義 、 暗 黙 の 定 義 、 組 み 合 わ せ 定 義 機 能 検 査 マ ク ロ が 一 つ も 明 示 的 に 定 義 さ れ な か っ た 場 合 、 デ フ ォ ル ト で 機 能 検 査 マ ク ロ _BSD_SOURCE (glibc 2.19 以 前 ), _SVID_SOURCE (glibc 2.19 以 前 ), _DEFAULT_SOURCE (glibc 2.19 以 降 ), _POSIX_SOURCE, _POSIX_C_SOURCE=200809L が 定 義 さ れ る (バ ー ジ ョ ン 2.10 よ り 前 の glibc で は 値 は 200112L、 バ ー ジ ョ ン 2.4 よ り 前 の glibc で は 値 は 199506L、 バ ー ジ ョ ン 2.1 よ り 前 の glibc で は 値 は 199309L)。
__STRICT_ANSI__, _ISOC99_SOURCE, _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _BSD_SOURCE (glibc 2.19 以 前 ), _SVID_SOURCE (glibc 2.19 以 前 ) の い ず れ か が 明 示 的 に 定 義 さ れ た 場 合 、 _BSD_SOURCE, _SVID_SOURCE, _SVID_SOURCE は デ フ ォ ル ト で は 定 義 さ れ な い 。
_POSIX_SOURCE と _POSIX_C_SOURCE が 明 示 的 に 定 義 さ れ な い 場 合 で 、 __STRICT_ANSI__ が 定 義 さ れ な い 、 も し く は _XOPEN_SOURCE が 500 以 上 の 値 で 定 義 さ れ た と き に は 、
* |
_POSIX_SOURCE が 値 1 で 定 義 さ れ 、 か つ |
|||
* |
_POSIX_C_SOURCE は 以 下 の 値 の い ず れ か 一 つ で 定 義 さ れ る 。 |
•
2 (_XOPEN_SOURCE が 500 未 満 の 値 で 定 義 さ れ た 場 合 ) | |||||||
• |
199506L (_XOPEN_SOURCE が 500 以 上 600 未 満 の 値 で 定 義 さ れ た 場 合 ) | ||||||
• |
(glibc 2.4 以 降 ) 200112L (_XOPEN_SOURCE が 600 以 上 700 未 満 の 値 で 定 義 さ れ た 場 合 ) | ||||||
• |
(glibc 2.10 以 降 ) 200809L (_XOPEN_SOURCE が 700 以 上 の 値 で 定 義 さ れ た 場 合 )
古 い バ
ー ジ ョ ン の glibc で
は _POSIX_C_SOURCE の 値 と
し て 200112L や 200809L は 存
在 せ ず 、 _POSIX_C_SOURCE
の 値 が ど う な
る か は glibc の バ ー
ジ ョ ン に よ り
異 な る 。 _XOPEN_SOURCE が 未 定 義 の 場 合 、 _POSIX_C_SOURCE の 値 は glibc の バ ー ジ ョ ン に よ り 異 な る 。 バ ー ジ ョ ン 2.4 よ り 前 の glibc で は 199506L、 バ ー ジ ョ ン 2.4 以 降 2.9 未 満 で は 200112L、 glibc 2.10 以 降 で は 200809L と な る 。 ま た 、 複 数 の マ ク ロ を 定 義 す る こ と も で き る 。 こ の 場 合 、 定 義 し た マ ク ロ は す べ て 有 効 に な る 。 準 拠POSIX.1 で は _POSIX_C_SOURCE, _POSIX_SOURCE, _XOPEN_SOURCE が 規 定 さ れ て い る 。 _XOPEN_SOURCE_EXTENDED は XPG4v2 (別 名 SUSv1) で 規 定 さ れ て い た 。 _FILE_OFFSET_BITS は ど の 標 準 で も 規 定 さ れ て い な い が 、 他 の い く つ か の 実 装 で 採 用 さ れ て い る 。 _BSD_SOURCE, _SVID_SOURCE, _DEFAULT_SOURCE, _ATFILE_SOURCE, _GNU_SOURCE, _FORTIFY_SOURCE, _REENTRANT, _THREAD_SAFE は Linux (glibc) 固 有 で あ る 。 注 意<features.h> は Linux/glibc 固 有 の ヘ ッ ダ ー フ ァ イ ル で あ る 。 他 の シ ス テ ム に も 同 様 の 目 的 の フ ァ イ ル が あ る が 、 普 通 は 違 う 名 前 で あ る 。 こ の ヘ ッ ダ ー フ ァ イ ル は 、 他 の ヘ ッ ダ ー フ ァ イ ル に よ り 必 要 に 応 じ て 自 動 的 に イ ン ク ル ー ド さ れ る 。 機 能 検 査 マ ク ロ を 利 用 す る た め に 明 示 的 に イ ン ク ル ー ド す る 必 要 は な い 。 上 記 の 機 能 検 査 マ ク ロ の う ち ど れ が 定 義 さ れ た か に し た が っ て 、 <features.h> は 、 他 の glibc ヘ ッ ダ ー フ ァ イ ル で チ ェ ッ ク さ れ る 各 種 の 他 の マ ク ロ を 、 内 部 で 定 義 す る 。 こ れ ら の マ ク ロ の 名 前 は ア ン ダ ー ス コ ア 2つ で 始 ま る (例 え ば __USE_MISC)。 ユ ー ザ ー プ ロ グ ラ ム は こ れ ら の マ ク ロ を 決 し て 直 接 定 義 す べ き で は な い 。 代 わ り に 、 上 記 の リ ス ト に あ る 適 切 な 機 能 検 査 マ ク ロ を 利 用 す べ き で あ る 。 例下 記 の プ ロ グ ラ ム を 使 う と 、 各 種 の 機 能 検 査 マ ク ロ が glibc の バ ー ジ ョ ン に 応 じ て ど の よ う に 設 定 さ れ る か や 、 ど の 機 能 検 査 マ ク ロ が 明 示 的 に 設 定 さ れ る か 、 を 調 べ る こ と が で き る 。 以 下 に 示 す シ ェ ル セ ッ シ ョ ン は 、 glibc 2.10 の シ ス テ ム で の 実 行 結 果 の 例 で あ る 。 $ cc
ftm.c /* ftm.c */ #include
<stdio.h> int #ifdef
_POSIX_C_SOURCE #ifdef
_ISOC99_SOURCE #ifdef
_ISOC11_SOURCE #ifdef
_XOPEN_SOURCE #ifdef
_XOPEN_SOURCE_EXTENDED #ifdef
_LARGEFILE64_SOURCE #ifdef
_FILE_OFFSET_BITS #ifdef
_BSD_SOURCE #ifdef
_SVID_SOURCE #ifdef
_DEFAULT_SOURCE #ifdef
_ATFILE_SOURCE #ifdef
_GNU_SOURCE #ifdef
_REENTRANT #ifdef
_THREAD_SAFE #ifdef
_FORTIFY_SOURCE exit(EXIT_SUCCESS); } 関 連 項 目info libc の "Feature Test Macros" の 節 。 /usr/include/features.h こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |