Manpages

名 前

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_tlseek() に 対 応 す る の は 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
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 200809L
_BSD_SOURCE defined
_SVID_SOURCE defined
_ATFILE_SOURCE defined
$ cc −D_XOPEN_SOURCE=500 ftm.c
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 199506L
_XOPEN_SOURCE defined: 500
$ cc −D_GNU_SOURCE ftm.c
$ ./a.out
_POSIX_SOURCE defined
_POSIX_C_SOURCE defined: 200809L
_ISOC99_SOURCE defined
_XOPEN_SOURCE defined: 700
_XOPEN_SOURCE_EXTENDED defined
_LARGEFILE64_SOURCE defined
_BSD_SOURCE defined
_SVID_SOURCE defined
_ATFILE_SOURCE defined
_GNU_SOURCE defined プ ロ グ ラ ム の ソ ー ス

/* ftm.c */

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
#ifdef _POSIX_SOURCE
printf("_POSIX_SOURCE defined\n");
#endif

#ifdef _POSIX_C_SOURCE
printf("_POSIX_C_SOURCE defined: %ldL\n", (long) _POSIX_C_SOURCE);
#endif

#ifdef _ISOC99_SOURCE
printf("_ISOC99_SOURCE defined\n");
#endif

#ifdef _ISOC11_SOURCE
printf("_ISOC11_SOURCE defined\n");
#endif

#ifdef _XOPEN_SOURCE
printf("_XOPEN_SOURCE defined: %d\n", _XOPEN_SOURCE);
#endif

#ifdef _XOPEN_SOURCE_EXTENDED
printf("_XOPEN_SOURCE_EXTENDED defined\n");
#endif

#ifdef _LARGEFILE64_SOURCE
printf("_LARGEFILE64_SOURCE defined\n");
#endif

#ifdef _FILE_OFFSET_BITS
printf("_FILE_OFFSET_BITS defined: %d\n", _FILE_OFFSET_BITS);
#endif

#ifdef _BSD_SOURCE
printf("_BSD_SOURCE defined\n");
#endif

#ifdef _SVID_SOURCE
printf("_SVID_SOURCE defined\n");
#endif

#ifdef _DEFAULT_SOURCE
printf("_DEFAULT_SOURCE defined\n");
#endif

#ifdef _ATFILE_SOURCE
printf("_ATFILE_SOURCE defined\n");
#endif

#ifdef _GNU_SOURCE
printf("_GNU_SOURCE defined\n");
#endif

#ifdef _REENTRANT
printf("_REENTRANT defined\n");
#endif

#ifdef _THREAD_SAFE
printf("_THREAD_SAFE defined\n");
#endif

#ifdef _FORTIFY_SOURCE
printf("_FORTIFY_SOURCE defined\n");
#endif

exit(EXIT_SUCCESS); }

関 連 項 目

libc(7), standards(7)

info libc の "Feature Test Macros" の 節 。

/usr/include/features.h

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。