.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH FEATURE_TEST_MACROS 7 2012\-08\-05 Linux "Linux Programmer's Manual"
+.\"
+.\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI all rights reserved.
+.\" Translated 2006-07-16, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
+.\" Updated 2007-05-01, Akihiro MOTOKI, LDP v2.46
+.\" Updated 2007-09-08, Akihiro MOTOKI, LDP v2.64
+.\" Updated 2009-04-23, Akihiro MOTOKI, LDP v3.21
+.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH FEATURE_TEST_MACROS 7 2014\-03\-20 Linux "Linux Programmer's Manual"
.SH 名前
feature_test_macros \- 機能検査マクロ
.SH 書式
.nf
#define _BSD_SOURCE
-#define _XOPEN_SOURCE /* or any value < 500 */
+#define _XOPEN_SOURCE /* 500 未満の任意の値 */
.fi
.RE
.PP
.nf
cc \-D_BSD_SOURCE
-cc \-D_XOPEN_SOURCE # Or any value < 500
+cc \-D_XOPEN_SOURCE # 500 未満の任意の値
.fi
.RE
.PP
.IP \(bu
値が 199506 以上の場合、 POSIX.1c (スレッド) 関連の定義が追加で公開される。
.IP \(bu
-(glibc 2.3.3 以降) 値が 200112L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2001
-基本仕様に対応する定義が公開される。
+(Since glibc 2.3.3) The value 200112L or greater additionally exposes
+definitions corresponding to the POSIX.1\-2001 base specification (excluding
+the XSI extension) and also causes C95 (since glibc 2.12) and C99 (since
+glibc 2.10) features to be exposed.
.IP \(bu
(glibc 2.10 以降) 値が 200809L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2008
-基本仕様に対応する定義が公開される。
+基本仕様に対応する定義が追加で公開される。
.RE
.TP
\fB_POSIX_SOURCE\fP
(glibc 2.10 以降) 値が 700 以上の場合、 SUSv4 (POSIX.1\-2008 基本仕様 + XSI 拡張と同じ)
関連の定義が追加で公開される。
.RE
+.IP
+If \fB__STRICT_ANSI__\fP is not defined, or \fB_XOPEN_SOURCE\fP is defined with a
+value greater than or equal to 500 \fIand\fP neither \fB_POSIX_SOURCE\fP not
+\fB_POSIX_C_SOURCE\fP is explicitly defined, then the following macros are
+implicitly defined:
+.RS
+.IP \(bu 3
+\fB_POSIX_SOURCE\fP が値 1 で定義される。
+.IP \(bu
+\fB_POSIX_C_SOURCE\fP は、\fB_XOPEN_SOURCE\fP の値に基づいて定義される。
+.RS 7
+.TP
+\fB_XOPEN_SOURCE\fP < 500
+\fB_POSIX_C_SOURCE\fP が値 2 で定義される。
+.TP
+500 <= \fB_XOPEN_SOURCE\fP < 600
+\fB_POSIX_C_SOURCE\fP が値 199506L で定義される。
+.TP
+600 <= \fB_XOPEN_SOURCE\fP < 700
+\fB_POSIX_C_SOURCE\fP が値 200112L で定義される。
+.TP
+700 <= \fB_XOPEN_SOURCE\fP (glibc 2.10 以降)
+\fB_POSIX_C_SOURCE\fP が値 200809L で定義される。
+.RE
+.RE
.TP
\fB_XOPEN_SOURCE_EXTENDED\fP
このマクロが定義され、さらに \fB_XOPEN_SOURCE\fP が定義されていると、XPG4v2 (SUSv1) UNIX 拡張 (UNIX 95)
に対応する定義が公開される。 \fB_XOPEN_SOURCE\fP が 500 以上の値で定義された場合、このマクロは暗黙のうちに定義される。
.TP
-\fB_ISOC95_SOURCE\fP
-ISO C (1990) Amendment 1 の定義 (C95 としても知られる) が公開される。
-C95 における主要な変更点は国際化文字集合のサポートであった。
-C95 の変更点は、これに続く C99 標準にも含まれた
-(言い換えると、\fB_ISOC99_SOURCE\fP を定義すると暗黙のうちに \fB_ISOC95_SOURCE\fP
-を定義されることを意味する)。
-.TP
-\fB_ISOC99_SOURCE\fP
-ISO C (1990) の C99 拡張を公開する。 このマクロは glibc 2.1.3 以降で認識される。 初期のバージョン 2.1.x の
-glibc では、これと等価な \fB_ISOC9X_SOURCE\fP という名前のマクロが使われていた (なぜなら、C99
-標準はまだ確定していなかったからである)。 \fB_ISOC9X_SOURCE\fP マクロの使用は廃止されているが、 glibc
+\fB_ISOC99_SOURCE\fP (glibc 2.1.3 以降)
+ISO C99 標準に準拠した宣言を公開する。
+
+初期のバージョン 2.1.x の glibc では、これと等価な \fB_ISOC9X_SOURCE\fP という名前のマクロが使われていた
+(なぜなら、C99 標準はまだ確定していなかったからである)。 \fB_ISOC9X_SOURCE\fP マクロの使用は廃止されているが、 glibc
は過去との互換性のため今でもこのマクロを認識する。
+
+Defining \fB_ISOC99_SOURCE\fP also exposes ISO C (1990) Amendment 1 ("C95")
+definitions. (The primary change in C95 was support for international
+character sets.)
.TP
-\fB_ISOC11_SOURCE\fP
-ISO C11 標準に準拠した宣言を公開する。
-このマクロは glibc 2.16 以降で認識される。
+\fB_ISOC11_SOURCE\fP (glibc 2.16 以降)
+Exposes declarations consistent with the ISO C11 standard. Defining this
+macro also enables C99 and C95 features (like \fB_ISOC99_SOURCE\fP).
.TP
\fB_LARGEFILE64_SOURCE\fP
LFS (Large File Summit) により "暫定拡張 (transitional extension)" Single UNIX
.UE
参照)。 代替 API は新規オブジェクト
(関数と型) の集合で構成され、 その名前は "64" で終わる (例えば、 \fIoff_t\fP に対応するのは \fIoff64_t\fP、
-\fBlseek\fP() ã\81«å¯¾å¿\9cã\81\99ã\82\8bã\81®ã\81¯ \fBlseek64\fP() ã\81§ã\81\82ã\82\8b)ã\80\82 æ\96°ã\81\97ã\81\84ã\83\97ã\83ã\82°ã\83©ã\83 ã\81§ã\81¯ã\81\93ã\81®ã\82¤ã\83³ã\82¿ã\83\95ã\82§ã\83¼ã\82¹を利用しないこと。 代わりに
+\fBlseek\fP() ã\81«å¯¾å¿\9cã\81\99ã\82\8bã\81®ã\81¯ \fBlseek64\fP() ã\81§ã\81\82ã\82\8b)ã\80\82 æ\96°ã\81\97ã\81\84ã\83\97ã\83ã\82°ã\83©ã\83 ã\81§ã\81¯ã\81\93ã\81®ã\83\9eã\82¯ã\83を利用しないこと。 代わりに
\fI_FILE_OFFSET_BITS=64\fP を利用すること。
.TP
+\fB_LARGEFILE_SOURCE\fP
+This macro was historically used to expose certain functions (specifically
+\fBfseeko\fP(3) and \fBftello\fP(3)) that address limitations of earlier APIs
+(\fBfeek\fP(3) and \fBftell\fP(3)) that use \fIlong int\fP for file offsets. This
+macro is implicitly defined if \fB_XOPEN_SOURCE\fP is defined with a value
+greater than or equal to 500. New programs should not employ this macro;
+defining \fB_XOPEN_SOURCE\fP as just described or defining \fB_FILE_OFFSET_BITS\fP
+with the value 64 is the preferred mechanism to achieve the same result.
+.TP
\fB_FILE_OFFSET_BITS\fP
このマクロを値 64 で定義すると、ファイル I/O とファイルシステム操作に 関連する 32 ビット版の関数とデータタイプは自動的に 64 ビット版に
変換される。 これは、32 ビットシステムで大きなファイル (> 2 ギガバイト) の I/O を実行する際に役立つ
-(このマクロを定義すると、コンパイルし直すだけで大きなファイルを 扱えるプログラムを書くことができる)。 64 ビットシステムは、もともと 2
-ギガバイトより大きなファイルを 扱えるので、64 ビットシステムではこのマクロは効果を持たない。
+(このマクロを定義すると、コンパイルし直すだけで大きなファイルを 扱えるプログラムを書くことができる)。
+
+64 ビットシステムは、もともと 2 ギガバイトより大きなファイルを 扱えるので、64 ビットシステムではこのマクロは効果を持たない。
.TP
-\fB_BSD_SOURCE\fP
-このマクロを定義すると (値に関わらず) ヘッダファイルで BSD 由来の定義が公開される。
-また、このマクロを定義すると、相容れない標準が存在する状況において BSD 由来の定義を優先するようになる。 ただし、 \fB_SVID_SOURCE\fP,
-\fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP, \fB_XOPEN_SOURCE\fP,
-\fB_XOPEN_SOURCE_EXTENDED\fP, \fB_GNU_SOURCE\fP が一つでも定義された場合には、BSD 由来の定義は優先されなくなる。
+\fB_BSD_SOURCE\fP (glibc 2.20 以降では非推奨)
+このマクロを定義すると、値に関わらず、ヘッダファイルで BSD 由来の定義が公開される。
+
+バージョン 2.18 以前の glibc では、このマクロを定義すると、相容れない標準が存在する状況において BSD 由来の定義を優先するようになる。
+ただし、 \fB_SVID_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP,
+\fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_GNU_SOURCE\fP
+が一つでも定義された場合には、BSD 由来の定義は優先されなくなる。 glibc 2.19 以降では、 \fB_BSD_SOURCE\fP
+を定義しても相容れない標準があっても BSD 由来の定義が優先されることはもはやなくなった。
+
+.\" commit c941736c92fa3a319221f65f6755659b2a5e0a20
+.\" commit 498afc54dfee41d33ba519f496e96480badace8e
+.\" commit acd7f096d79c181866d56d4aaf3b043e741f1e2c
+.\" commit ade40b10ff5fa59a318cf55b9d8414b758e8df78
+Since glibc 2.20, this macro is deprecated. It now has the same effect as
+defining \fB_DEFAULT_SOURCE\fP, but generates a compile\-time warning (unless
+\fB_DEFAULT_SOURCE\fP is also defined). Use \fB_DEFAULT_SOURCE\fP instead. To
+allow code that requires \fB_BSD_SOURCE\fP in glibc 2.19 and earlier and
+\fB_DEFAULT_SOURCE\fP in glibc 2.20 and later to compile without warnings,
+define \fIboth\fP \fB_BSD_SOURCE\fP and \fB_DEFAULT_SOURCE\fP.
.TP
-\fB_SVID_SOURCE\fP
+\fB_SVID_SOURCE\fP (glibc 2.20 以降では非推奨)
このマクロを定義すると (値に関わらず) ヘッダファイルで System V 由来の定義が公開される (SVID == System V
Interface Definition; \fBstandards\fP(7) 参照)。
+
+Since glibc 2.20, this macro is deprecated in the same fashion as
+\fB_BSD_SOURCE\fP.
+.TP
+\fB_DEFAULT_SOURCE\fP (glibc 2.19 以降)
+This macro can be defined to ensure that the "default" definitions are
+provided even when the defaults would otherwise be disabled, as happens when
+individual macros are explicitly defined, or the compiler is invoked in one
+of its "standard" modes (e.g., \fIcc\ \-std=c99\fP). Defining
+\fB_DEFAULT_SOURCE\fP without defining other individual macros or invoking the
+compiler in one of its "standard" modes has no effect.
+
+The "default" definitions comprise those required by POSIX.1\-2008 as well as
+various definitions derived from BSD and System V. On glibc 2.19 and
+earlier, these defaults were approximately equivalent to explicitly defining
+the following:
+
+ cc \-D_BSD_SOURCE \-D_SVID_SOURCE \-D_POSIX_C_SOURCE=200809
+
.TP
\fB_ATFILE_SOURCE\fP (glibc 2.4 以降)
このマクロを定義すると (値に関わらず) ヘッダファイルで 名前の末尾が "at" の各種の関数の定義が公開される。 \fBopenat\fP(2) 参照。
このマクロも暗黙のうちに定義される。
.TP
\fB_GNU_SOURCE\fP
-このマクロを定義すると (値に関わらず) 以下のマクロを定義するのと 等価になる: \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP,
-\fB_ATFILE_SOURCE\fP, \fB_LARGEFILE64_SOURCE\fP, \fB_ISOC99_SOURCE\fP,
-\fB_XOPEN_SOURCE_EXTENDED\fP, \fB_POSIX_SOURCE\fP, 値 200809L の \fB_POSIX_C_SOURCE\fP
-(バージョン 2.10 より前の glibc では値は 200112L、 バージョン 2.5 より前の glibc では値は 199506L、
-バージョン 2.1 より前の glibc では値は 199309L), 値 700 の \fB_XOPEN_SOURCE\fP (バージョン 2.10
-より前の glibc では値は 600、 バージョン 2.2 より前の glibc では値は 500)。 さらに、各種の GNU
-固有の拡張も公開される。 指定された標準に矛盾があった場合は、 BSD 由来の定義が優先されなくなる。
+このマクロを定義すると (値に関わらず) 以下のマクロが暗黙のうちに定義される: \fB_ATFILE_SOURCE\fP,
+\fB_LARGEFILE64_SOURCE\fP, \fB_ISOC99_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP,
+\fB_POSIX_SOURCE\fP, 値 200809L の \fB_POSIX_C_SOURCE\fP (バージョン 2.10 より前の glibc では値は
+200112L、 バージョン 2.5 より前の glibc では値は 199506L、 バージョン 2.1 より前の glibc では値は
+199309L), 値 700 の \fB_XOPEN_SOURCE\fP (バージョン 2.10 より前の glibc では値は 600、 バージョン
+2.2 より前の glibc では値は 500)。
+
+Since glibc 2.19, defining \fB_GNU_SOURCE\fP also has the effect of implicitly
+defining \fB_DEFAULT_SOURCE\fP. In glibc versions before 2.20, defining
+\fB_GNU_SOURCE\fP also had the effect of implicitly defining \fB_BSD_SOURCE\fP and
+\fB_SVID_SOURCE\fP.
.TP
\fB_REENTRANT\fP
このマクロを定義すると、いくつかのリエントラント (再入可能) な関数 定義が公開される。マルチスレッド・プログラムでは、この代わりに \fIcc\ \-pthread\fP を使用すること。
.\" * From: Jakub Jelinek <jakub at redhat dot com>
.\" * To: gcc-patches at gcc dot gnu dot org
.\" * Date: Tue, 21 Sep 2004 04:16:40 -0400
-このマクロを定義すると、文字列やメモリの操作を行う様々な関数を 使用する際にバッファオーバーフローを検出するための軽めのチェックが
-実行されるようになる。すべてのバッファオーバーフローが検出される わけではなく、あくまでよくある例についてだけである。
-現在の実装では、以下の関数にチェックが追加されている: \fBmemcpy\fP(3), \fBmempcpy\fP(3), \fBmemmove\fP(3),
-\fBmemset\fP(3), \fBstpcpy\fP(3), \fBstrcpy\fP(3), \fBstrncpy\fP(3), \fBstrcat\fP(3),
-\fBstrncat\fP(3), \fBsprintf\fP(3), \fBsnprintf\fP(3), \fBvsprintf\fP(3),
-\fBvsnprintf\fP(3), \fBgets\fP(3). \fB_FORTIFY_SOURCE\fP が 1 に設定された場合、コンパイラの最適化レベルが
-1 (\fIgcc\ \-O1\fP) かそれ以上であれば、規格に準拠するプログラムの振る舞いを 変化させないようなチェックが実行される。
-\fB_FORTIFY_SOURCE\fP が 2 に設定された場合、さらなるチェックが追加されるが、
-規格に準拠するプログラムのいくつかが失敗する可能性がある。 いくつかのチェックはコンパイル時に実行でき、コンパイラの警告として
-表示される。他のチェックは実行時に行われ、チェックに失敗した場合 には実行時エラーとなる。 このマクロを使用するにはコンパイラの対応が必要であり、
-バージョン 4.0 以降の \fBgcc\fP(1) で利用できる。
+このマクロを定義すると、文字列やメモリの操作を行う様々な関数を使用する際にバッファオーバーフローを検出するための軽めのチェックが実行されるようになる。すべてのバッファオーバーフローが検出されるわけではなく、あくまでよくある例についてだけである。
+
+ついてだけである。 現在の実装では、以下の関数にチェックが追加されている: \fBmemcpy\fP(3), \fBmempcpy\fP(3),
+\fBmemmove\fP(3), \fBmemset\fP(3), \fBstpcpy\fP(3), \fBstrcpy\fP(3), \fBstrncpy\fP(3),
+\fBstrcat\fP(3), \fBstrncat\fP(3), \fBsprintf\fP(3), \fBsnprintf\fP(3), \fBvsprintf\fP(3),
+\fBvsnprintf\fP(3), \fBgets\fP(3)
+
+\fB_FORTIFY_SOURCE\fP が 1 に設定された場合、コンパイラの最適化レベルが 1 (\fIgcc\ \-O1\fP)
+かそれ以上であれば、規格に準拠するプログラムの振る舞いを 変化させないようなチェックが実行される。 \fB_FORTIFY_SOURCE\fP が 2
+に設定された場合、さらなるチェックが追加されるが、 規格に準拠するプログラムのいくつかが失敗する可能性がある。
+いくつかのチェックはコンパイル時に実行でき、コンパイラの警告として 表示される。他のチェックは実行時に行われ、チェックに失敗した場合
+には実行時エラーとなる。
+
+このマクロを使用するにはコンパイラの対応が必要であり、 バージョン 4.0 以降の \fBgcc\fP(1) で利用できる。
.SS デフォルトの定義、暗黙の定義、組み合わせ定義
.PP
-機能検査マクロが一つも明示的に定義されなかった場合、 デフォルトで機能検査マクロ \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP,
+機能検査マクロが一つも明示的に定義されなかった場合、 デフォルトで機能検査マクロ \fB_BSD_SOURCE\fP (glibc 2.19 以前),
+\fB_SVID_SOURCE\fP (glibc 2.19 以前), \fB_DEFAULT_SOURCE\fP (glibc 2.19 以降),
\fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP=200809L が定義される (バージョン 2.10 より前の glibc
では値は 200112L、 バージョン 2.4 より前の glibc では値は 199506L、 バージョン 2.1 より前の glibc では値は
199309L)。
.PP
\fB__STRICT_ANSI__\fP, \fB_ISOC99_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP,
-\fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP
-のいずれかが明示的に定義された場合、 \fB_BSD_SOURCE\fP と \fB_SVID_SOURCE\fP はデフォルトでは定義されない。
+\fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_BSD_SOURCE\fP (glibc 2.19 以前),
+\fB_SVID_SOURCE\fP (glibc 2.19 以前) のいずれかが明示的に定義された場合、 \fB_BSD_SOURCE\fP,
+\fB_SVID_SOURCE\fP, \fB_SVID_SOURCE\fP はデフォルトでは定義されない。
\fB_POSIX_SOURCE\fP と \fB_POSIX_C_SOURCE\fP が明示的に定義されない場合で、 \fB__STRICT_ANSI__\fP
が定義されない、もしくは \fB_XOPEN_SOURCE\fP が 500 以上の値で定義されたときには、
-.RS 3
.IP * 3
\fB_POSIX_SOURCE\fP が値 1 で定義され、かつ
.IP *
\fB_POSIX_C_SOURCE\fP は以下の値のいずれか一つで定義される。
-.RS 6
+.RS 3
.IP \(bu 3
2 (\fB_XOPEN_SOURCE\fP が 500 未満の値で定義された場合)
.IP \(bu
199506L (\fB_XOPEN_SOURCE\fP が 500 以上 600 未満の値で定義された場合)
.IP \(bu
-(glibc 2.4 以降) 200112L (\fBXOPEN_SOURCE\fP が 600 以上 700 未満の値で定義された場合)
+(glibc 2.4 以降) 200112L (\fB_XOPEN_SOURCE\fP が 600 以上 700 未満の値で定義された場合)
.IP \(bu
-(glibc 2.10 以降) 200809L (\fBXOPEN_SOURCE\fP が 700 以上の値で定義された場合)
+(glibc 2.10 以降) 200809L (\fB_XOPEN_SOURCE\fP が 700 以上の値で定義された場合)
.IP \(bu
古いバージョンの glibc では \fB_POSIX_C_SOURCE\fP の値として 200112L や 200809L は存在せず、
\fB_POSIX_C_SOURCE\fP の値がどうなるかは glibc のバージョンにより異なる。
2.4 より前の glibc では 199506L、 バージョン 2.4 以降 2.9 未満では 200112L、 glibc 2.10 以降では
200809L となる。
.RE
-.RE
.PP
また、複数のマクロを定義することもできる。 この場合、定義したマクロはすべて有効になる。
.SH 準拠
\fB_FILE_OFFSET_BITS\fP はどの標準でも規定されていないが、 他のいくつかの実装で採用されている。
-\fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP, \fB_ATFILE_SOURCE\fP, \fB_GNU_SOURCE\fP,
-\fB_FORTIFY_SOURCE\fP, \fB_REENTRANT\fP, \fB_THREAD_SAFE\fP は Linux (glibc) 固有である。
+\fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP, \fB_DEFAULT_SOURCE\fP, \fB_ATFILE_SOURCE\fP,
+\fB_GNU_SOURCE\fP, \fB_FORTIFY_SOURCE\fP, \fB_REENTRANT\fP, \fB_THREAD_SAFE\fP は Linux
+(glibc) 固有である。
.SH 注意
\fI<features.h>\fP は Linux/glibc 固有のヘッダファイルである。
他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。 このヘッダファイルは、他のヘッダファイルにより必要に応じて
_GNU_SOURCE defined
.fi
.in
-.SS "Program source"
+.SS プログラムのソース
\&
.nf
/* ftm.c */
printf("_ISOC99_SOURCE defined\en");
#endif
+#ifdef _ISOC11_SOURCE
+ printf("_ISOC11_SOURCE defined\en");
+#endif
+
#ifdef _XOPEN_SOURCE
printf("_XOPEN_SOURCE defined: %d\en", _XOPEN_SOURCE);
#endif
printf("_SVID_SOURCE defined\en");
#endif
+#ifdef _DEFAULT_SOURCE
+ printf("_DEFAULT_SOURCE defined\en");
+#endif
+
#ifdef _ATFILE_SOURCE
printf("_ATFILE_SOURCE defined\en");
#endif
\fI/usr/include/features.h\fP
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.52 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.64 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。