OSDN Git Service

Update README
[linuxjm/LDP_man-pages.git] / draft / man7 / feature_test_macros.7
1 .\" This manpage is Copyright (C) 2006, Michael Kerrisk
2 .\"
3 .\" %%%LICENSE_START(VERBATIM)
4 .\" Permission is granted to make and distribute verbatim copies of this
5 .\" manual provided the copyright notice and this permission notice are
6 .\" preserved on all copies.
7 .\"
8 .\" Permission is granted to copy and distribute modified versions of this
9 .\" manual under the conditions for verbatim copying, provided that the
10 .\" entire resulting derived work is distributed under the terms of a
11 .\" permission notice identical to this one.
12 .\"
13 .\" Since the Linux kernel and libraries are constantly changing, this
14 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
15 .\" responsibility for errors or omissions, or for damages resulting from
16 .\" the use of the information contained herein.  The author(s) may not
17 .\" have taken the same level of care in the production of this manual,
18 .\" which is licensed free of charge, as they might when working
19 .\" professionally.
20 .\"
21 .\" Formatted or processed versions of this manual, if unaccompanied by
22 .\" the source, must acknowledge the copyright and authors of this work.
23 .\" %%%LICENSE_END
24 .\"
25 .\"*******************************************************************
26 .\"
27 .\" This file was generated with po4a. Translate the source file.
28 .\"
29 .\"*******************************************************************
30 .\"
31 .\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI all rights reserved.
32 .\" Translated 2006-07-16, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
33 .\" Updated 2007-05-01, Akihiro MOTOKI, LDP v2.46
34 .\" Updated 2007-09-08, Akihiro MOTOKI, LDP v2.64
35 .\" Updated 2009-04-23, Akihiro MOTOKI, LDP v3.21
36 .\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
37 .\"
38 .TH FEATURE_TEST_MACROS 7 2014\-03\-20 Linux "Linux Programmer's Manual"
39 .SH 名前
40 feature_test_macros \- 機能検査マクロ
41 .SH 書式
42 .nf
43 \fB#include <features.h>\fP
44 .fi
45 .SH 説明
46 機能検査マクロ (feature test macro) により、プログラマは プログラムがコンパイルされる際にシステムのヘッダーファイルにより
47 公開される定義を制御することができる。
48
49 \fB注意:\fP 機能検査マクロを機能させるには、機能検査マクロの定義を 「どのヘッダーファイルのインクルードよりも前で」行わなければならない。
50 これを実現するには、 コンパイルコマンドで指定する方法 (\fIcc \-DMACRO=value\fP)  と、ソースコード内で必要なマクロの定義を
51 どのヘッダーのインクルードよりも前で行う方法がある。
52
53 機能検査マクロを使うと、非標準の定義が公開されないようにでき、 移植性のあるアプリケーションを作成するのに役立つ。
54 他のマクロを使うと、デフォルトでは公開されない非標準の定義を 公開することができる。 以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、
55 ヘッダーファイル \fI<features.h>\fP を調べればよい。
56 .SS マニュアルページでの機能検査マクロの要件の規定
57 関数が機能検査マクロの定義を必要とする場合、 マニュアルページの書式 (SYNOPSIS) の節に 以下の形式の注釈を入れる (以下の例は
58 \fBacct\fP(2)  のマニュアルページからの引用である)。
59 .RS 8
60 .sp
61 \fB#include <unistd.h>\fP
62 .sp
63 \fBint acct(const char *\fP\fIfilename\fP\fB);\fP
64 .sp
65 .nf
66 .in -4n
67 glibc 向けの機能検査マクロの要件
68 (\fBfeature_test_macros\fP(7)
69 参照):
70 .fi
71 .in
72 .sp
73 \fBacct\fP(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500)
74 .RE
75 .PP
76 \fB||\fP は、 \fBacct\fP(2)  の定義を \fI<unistd.h>\fP
77 から得るには、以下のマクロの定義のいずれかを、どのヘッダーファイルの インクルードよりも前で行わなければならないことを意味する。
78 .RS
79 .nf
80
81 #define _BSD_SOURCE
82 #define _XOPEN_SOURCE        /* 500 未満の任意の値 */
83 .fi
84 .RE
85 .PP
86 別の方法としては、等価な定義をコンパイル用のコマンドで 指定することもできる。
87 .RS
88 .nf
89
90 cc \-D_BSD_SOURCE
91 cc \-D_XOPEN_SOURCE           # 500 未満の任意の値
92 .fi
93 .RE
94 .PP
95 後で述べるが、 \fB「いくつかの機能検査マクロはデフォルトで定義される」\fP 点に注意すること。 このため、「書式」に記載された機能検査マクロを常に
96 明示的に指定する必要があるわけではない。
97
98 あまり多くないが、マニュアルページによっては、 機能検査マクロの要件を以下のように簡単な表現で記載する場合がある。 (以下の例は
99 \fBreadahead\fP(2)  のマニュアルページからの引用である)。
100 .RS
101 .nf
102
103 \fB#define _GNU_SOURCE\fP
104 \fB#include <fcntl.h>\fP
105 .sp
106 \fBssize_t readahead(int \fP\fIfd\fP\fB, off64_t *\fP\fIoffset\fP\fB, size_t \fP\fIcount\fP\fB);\fP
107 .fi
108 .RE
109 .PP
110 関数定義の公開に使える機能検査マクロが一つだけで、 デフォルトではそのマクロが定義されない場合に、 この形式の表現を利用する。
111 .SS "glibc が解釈する機能検査マクロ"
112 .\" The details in glibc 2.0 are simpler, but combining a
113 .\" a description of them with the details in later glibc versions
114 .\" would make for a complicated description.
115 以下では、Linux glibc 2.\fIx\fP (\fIx\fP > 0) において、 機能検査マクロがどのように扱われるかを説明する。
116
117 Linux/glibc は以下の機能検査マクロを解釈する:
118 .TP 
119 \fB__STRICT_ANSI__\fP
120 ISO 標準の C。 \fBgcc\fP(1)  を \fI\-std=c99\fP や \fI\-ansi\fP などのフラグを付けて起動した場合、
121 このマクロは暗黙のうちに定義される。
122 .TP 
123 \fB_POSIX_C_SOURCE\fP
124 このマクロを定義すると、ヘッダーファイルで以下の定義が公開される。
125 .RS
126 .IP \(bu 3
127 値が 1 の場合、POSIX.1\-1990 と ISO C (1990) に準拠する定義が公開される。
128 .IP \(bu
129 値が 2 以上の場合、 POSIX.2\-1992 関連の定義も追加で公開される。
130 .IP \(bu
131 .\" 199506L functionality is available only since glibc 2.1
132 値が 199309 以上の場合、 POSIX.1b (リアルタイム拡張) 関連の定義が追加で公開される。
133 .IP \(bu
134 値が 199506 以上の場合、 POSIX.1c (スレッド) 関連の定義が追加で公開される。
135 .IP \(bu
136 (glibc 2.3.3 以降)  値が 200112L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2001
137 基本仕様に対応する定義も追加で公開され、また C95 (glibc 2.12 以降) と C99 (glibc 2.10 以降) の機能も公開される。
138 .IP \(bu
139 (glibc 2.10 以降)  値が 200809L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2008
140 基本仕様に対応する定義が追加で公開される。
141 .RE
142 .TP 
143 \fB_POSIX_SOURCE\fP
144 このマクロは廃止予定である。 このマクロが定義されると、値に関わらず、 \fB_POSIX_C_SOURCE\fP を値 1 で定義するのと等価となる。
145 .TP 
146 \fB_XOPEN_SOURCE\fP
147 このマクロを定義すると、ヘッダーファイルで以下の定義が公開される。
148 .RS
149 .IP \(bu 3
150 どんな値でも、ヘッダーファイルで POSIX.1, POSIX.2, XPG4 に準拠する定義が公開される。
151 .IP \(bu
152 値が 500 以上の場合、 SUSv2 (UNIX 98) 関連の定義が追加で公開される。
153 .IP \(bu
154 (glibc 2.2 以降)  値が 600 以上の場合、 SUSv3 (UNIX 03; POSIX.1\-2001 基本仕様 + XSI 拡張と同じ)
155 関連の定義と C99 での定義が追加で公開される。
156 .IP \(bu
157 (glibc 2.10 以降)  値が 700 以上の場合、 SUSv4 (POSIX.1\-2008 基本仕様 + XSI 拡張と同じ)
158 関連の定義が追加で公開される。
159 .RE
160 .IP
161 \fB__STRICT_ANSI__\fP が定義されていない場合、または \fB_XOPEN_SOURCE\fP が 500 以上の値で定義されていて、
162 \fB_POSIX_SOURCE\fP も \fB_POSIX_C_SOURCE\fP も明示的に定義されていない場合、以下のマクロが暗黙のうちに定義される。
163 .RS
164 .IP \(bu 3
165 \fB_POSIX_SOURCE\fP が値 1 で定義される。
166 .IP \(bu
167 \fB_POSIX_C_SOURCE\fP は、\fB_XOPEN_SOURCE\fP の値に基づいて定義される。
168 .RS 7
169 .TP 
170 \fB_XOPEN_SOURCE\fP < 500
171 \fB_POSIX_C_SOURCE\fP が値 2 で定義される。
172 .TP 
173 500 <= \fB_XOPEN_SOURCE\fP < 600
174 \fB_POSIX_C_SOURCE\fP が値 199506L で定義される。
175 .TP 
176 600 <= \fB_XOPEN_SOURCE\fP < 700
177 \fB_POSIX_C_SOURCE\fP が値 200112L で定義される。
178 .TP 
179 700 <= \fB_XOPEN_SOURCE\fP (glibc 2.10 以降)
180 \fB_POSIX_C_SOURCE\fP が値 200809L で定義される。
181 .RE
182 .RE
183 .TP 
184 \fB_XOPEN_SOURCE_EXTENDED\fP
185 このマクロが定義され、さらに \fB_XOPEN_SOURCE\fP が定義されていると、XPG4v2 (SUSv1) UNIX 拡張 (UNIX 95)
186 に対応する定義が公開される。 \fB_XOPEN_SOURCE\fP が 500 以上の値で定義された場合、このマクロは暗黙のうちに定義される。
187 .TP 
188 \fB_ISOC99_SOURCE\fP (glibc 2.1.3 以降)
189 ISO C99 標準に準拠した宣言を公開する。
190
191 初期のバージョン 2.1.x の glibc では、これと等価な \fB_ISOC9X_SOURCE\fP という名前のマクロが使われていた
192 (なぜなら、C99 標準はまだ確定していなかったからである)。 \fB_ISOC9X_SOURCE\fP マクロの使用は廃止されているが、 glibc
193 は過去との互換性のため今でもこのマクロを認識する。
194
195 \fB_ISOC99_SOURCE\fP を定義すると、 ISO C (1990) Amendment 1 ("C95") の定義も公開される (C95
196 での主要な変更点は国際化文字集合のサポートであった)。
197 .TP 
198 \fB_ISOC11_SOURCE\fP (glibc 2.16 以降)
199 ISO C11 標準に準拠した宣言を公開する。 このマクロを定義すると (\fB_ISOC99_SOURCE\fP 同様) C99 と C95
200 の機能も有効になる。
201 .TP 
202 \fB_LARGEFILE64_SOURCE\fP
203 LFS (Large File Summit) により "暫定拡張 (transitional extension)" Single UNIX
204 Specification として規定された代替 API (alternative API) に関する定義を公開する (
205 .UR http:\:/\:/opengroup.org\:/platform\:/lfs.html
206 .UE
207 参照)。 代替 API は新規オブジェクト
208 (関数と型) の集合で構成され、 その名前は "64" で終わる (例えば、 \fIoff_t\fP に対応するのは \fIoff64_t\fP、
209 \fBlseek\fP()  に対応するのは \fBlseek64\fP()  である)。 新しいプログラムではこのマクロを利用しないこと。 代わりに
210 \fI_FILE_OFFSET_BITS=64\fP を利用すること。
211 .TP 
212 \fB_LARGEFILE_SOURCE\fP
213 このマクロは、歴史的には、ファイルオフセットで \fIlong int\fP を使う以前の API (\fBfseek\fP(3) や \fBftell\fP(3))
214 の制限を解決する関数 (特に \fBfseeko\fP(3) と \fBftello\fP(3)) を公開するのに使われていた。 このマクロは
215 \fB_XOPEN_SOURCE\fP が 500 以上の値で定義されている場合に暗黙のうちに定義される。
216 新しいプログラムでぇあこのマクロは使用すべきではない。 \fB_XOPEN_SOURCE\fP をただ定義するか、 \fB_FILE_OFFSET_BITS\fP
217 を値 64 で定義するのが、同じ結果を得るための推奨される方法である。
218 .TP 
219 \fB_FILE_OFFSET_BITS\fP
220 このマクロを値 64 で定義すると、ファイル I/O とファイルシステム操作に 関連する 32 ビット版の関数とデータタイプは自動的に 64 ビット版に
221 変換される。 これは、32 ビットシステムで大きなファイル (> 2 ギガバイト) の I/O を実行する際に役立つ
222 (このマクロを定義すると、コンパイルし直すだけで大きなファイルを 扱えるプログラムを書くことができる)。
223
224 64 ビットシステムは、もともと 2 ギガバイトより大きなファイルを 扱えるので、64 ビットシステムではこのマクロは効果を持たない。
225 .TP 
226 \fB_BSD_SOURCE\fP (glibc 2.20 以降では非推奨)
227 このマクロを定義すると、値に関わらず、ヘッダーファイルで BSD 由来の定義が公開される。
228
229 バージョン 2.18 以前の glibc では、このマクロを定義すると、相容れない標準が存在する状況において BSD 由来の定義を優先するようになる。
230 ただし、 \fB_SVID_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP,
231 \fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_GNU_SOURCE\fP
232 が一つでも定義された場合には、BSD 由来の定義は優先されなくなる。 glibc 2.19 以降では、 \fB_BSD_SOURCE\fP
233 を定義しても相容れない標準があっても BSD 由来の定義が優先されることはもはやなくなった。
234
235 .\" commit c941736c92fa3a319221f65f6755659b2a5e0a20
236 .\" commit 498afc54dfee41d33ba519f496e96480badace8e
237 .\" commit acd7f096d79c181866d56d4aaf3b043e741f1e2c
238 .\" commit ade40b10ff5fa59a318cf55b9d8414b758e8df78
239 glibc 2.20 以降では、このマクロは非推奨である。 このマクロは現在は \fB_DEFAULT_SOURCE\fP を定義するのと同じ効果を持つが、
240 (\fB_DEFAULT_SOURCE\fP が合わせて定義されていない場合には) コンパイル時の警告が出る。 代わりに \fB_DEFAULT_SOURCE\fP
241 を使用すること。 glibc 2.19 以前で \fB_BSD_SOURCE\fP が必要で glibc 2.20 以降で
242 \fB_DEFAULT_SOURCE\fP を必要とするプログラムを警告を出さずにコンパイルするには、 \fB_BSD_SOURCE\fP と
243 \fB_DEFAULT_SOURCE\fP の\fI両方\fPを定義すること。
244 .TP 
245 \fB_SVID_SOURCE\fP (glibc 2.20 以降では非推奨)
246 このマクロを定義すると (値に関わらず) ヘッダーファイルで System V 由来の定義が公開される (SVID == System V
247 Interface Definition; \fBstandards\fP(7)  参照)。
248
249 glibc 2.20 以降、 \fB_BSD_SOURCE\fP と同様にこのマクロは非推奨となっている。
250 .TP 
251 \fB_DEFAULT_SOURCE\fP (glibc 2.19 以降)
252 このマクロを使うと、「デフォルト」が無効になるような場合でも「デフォルト」の定義が提供されるようにすることができる。「デフォルト」が無効になるような状況は、個別のマクロが明示的に定義された場合や、コンパイラが「標準」モードのいずれか
253 (例えば \fIcc\ \-std=c99\fP)
254 で起動された場合などである。他の個々のマクロが定義されず、コンパイラも「標準」モードのいずれかを指定して起動されていない場合は、
255 \fB_DEFAULT_SOURCE\fP を定義しても何の効果もない。
256
257 「デフォルト」定義は、 POSIX.1\-2008 で必須となっている定義と、 BSD と System V 由来の種々の定義を公開する。 glibc
258 2.19 以前では、これらのデフォルトは以下を明示的に定義するのとほぼ等価である。
259
260     cc \-D_BSD_SOURCE \-D_SVID_SOURCE \-D_POSIX_C_SOURCE=200809
261
262 .TP 
263 \fB_ATFILE_SOURCE\fP (glibc 2.4 以降)
264 このマクロを定義すると (値に関わらず) ヘッダーファイルで 名前の末尾が "at" の各種の関数の定義が公開される。 \fBopenat\fP(2)
265 参照。 glibc 2.10 以降では、 \fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義された場合には、
266 このマクロも暗黙のうちに定義される。
267 .TP 
268 \fB_GNU_SOURCE\fP
269 このマクロを定義すると (値に関わらず) 以下のマクロが暗黙のうちに定義される: \fB_ATFILE_SOURCE\fP,
270 \fB_LARGEFILE64_SOURCE\fP, \fB_ISOC99_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP,
271 \fB_POSIX_SOURCE\fP, 値 200809L の \fB_POSIX_C_SOURCE\fP (バージョン 2.10 より前の glibc では値は
272 200112L、 バージョン 2.5 より前の glibc では値は 199506L、 バージョン 2.1 より前の glibc では値は
273 199309L), 値 700 の \fB_XOPEN_SOURCE\fP (バージョン 2.10 より前の glibc では値は 600、 バージョン
274 2.2 より前の glibc では値は 500)。
275
276 glibc 2.19 以降では、 \fB_GNU_SOURCE\fP を定義すると、 \fB_DEFAULT_SOURCE\fP も暗黙のうちに定義される。
277 バージョン 2.20 より前の glibc では、 \fB_GNU_SOURCE\fP を定義すると、 \fB_BSD_SOURCE\fP と
278 \fB_SVID_SOURCE\fP も暗黙のうちに定義されていた。
279 .TP 
280 \fB_REENTRANT\fP
281 このマクロを定義すると、いくつかのリエントラント (再入可能) な関数 定義が公開される。マルチスレッドプログラムでは、この代わりに \fIcc\ \-pthread\fP を使用すること。
282 .TP 
283 \fB_THREAD_SAFE\fP
284 \fB_REENTRANT\fP の同義語。 他のいくつかの実装との互換性を提供するためのもの。
285 .TP 
286 \fB_FORTIFY_SOURCE\fP (glibc 2.3.4 以降)
287 .\" For more detail, see:
288 .\" http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
289 .\" [PATCH] Object size checking to prevent (some) buffer overflows
290 .\" * From: Jakub Jelinek <jakub at redhat dot com>
291 .\" * To: gcc-patches at gcc dot gnu dot org
292 .\" * Date: Tue, 21 Sep 2004 04:16:40 -0400
293 このマクロを定義すると、文字列やメモリーの操作を行う様々な関数を使用する際にバッファーオーバーフローを検出するための軽めのチェックが実行されるようになる。すべてのバッファーオーバーフローが検出されるわけではなく、あくまでよくある例についてだけである。
294
295 ついてだけである。 現在の実装では、以下の関数にチェックが追加されている: \fBmemcpy\fP(3), \fBmempcpy\fP(3),
296 \fBmemmove\fP(3), \fBmemset\fP(3), \fBstpcpy\fP(3), \fBstrcpy\fP(3), \fBstrncpy\fP(3),
297 \fBstrcat\fP(3), \fBstrncat\fP(3), \fBsprintf\fP(3), \fBsnprintf\fP(3), \fBvsprintf\fP(3),
298 \fBvsnprintf\fP(3), \fBgets\fP(3)
299
300 \fB_FORTIFY_SOURCE\fP が 1 に設定された場合、コンパイラの最適化レベルが 1 (\fIgcc\ \-O1\fP)
301 かそれ以上であれば、規格に準拠するプログラムの振る舞いを 変化させないようなチェックが実行される。 \fB_FORTIFY_SOURCE\fP が 2
302 に設定された場合、さらなるチェックが追加されるが、 規格に準拠するプログラムのいくつかが失敗する可能性がある。
303 いくつかのチェックはコンパイル時に実行でき、コンパイラの警告として 表示される。他のチェックは実行時に行われ、チェックに失敗した場合
304 には実行時エラーとなる。
305
306 このマクロを使用するにはコンパイラの対応が必要であり、 バージョン 4.0 以降の \fBgcc\fP(1)  で利用できる。
307 .SS デフォルトの定義、暗黙の定義、組み合わせ定義
308 .PP
309 機能検査マクロが一つも明示的に定義されなかった場合、 デフォルトで機能検査マクロ \fB_BSD_SOURCE\fP (glibc 2.19 以前),
310 \fB_SVID_SOURCE\fP (glibc 2.19 以前), \fB_DEFAULT_SOURCE\fP (glibc 2.19 以降),
311 \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP=200809L が定義される (バージョン 2.10 より前の glibc
312 では値は 200112L、 バージョン 2.4 より前の glibc では値は 199506L、 バージョン 2.1 より前の glibc では値は
313 199309L)。
314 .PP
315 \fB__STRICT_ANSI__\fP, \fB_ISOC99_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP,
316 \fB_XOPEN_SOURCE\fP, \fB_XOPEN_SOURCE_EXTENDED\fP, \fB_BSD_SOURCE\fP (glibc 2.19 以前),
317 \fB_SVID_SOURCE\fP (glibc 2.19 以前) のいずれかが明示的に定義された場合、 \fB_BSD_SOURCE\fP,
318 \fB_SVID_SOURCE\fP, \fB_SVID_SOURCE\fP はデフォルトでは定義されない。
319
320 \fB_POSIX_SOURCE\fP と \fB_POSIX_C_SOURCE\fP が明示的に定義されない場合で、 \fB__STRICT_ANSI__\fP
321 が定義されない、もしくは \fB_XOPEN_SOURCE\fP が 500 以上の値で定義されたときには、
322 .IP * 3
323 \fB_POSIX_SOURCE\fP が値 1 で定義され、かつ
324 .IP *
325 \fB_POSIX_C_SOURCE\fP は以下の値のいずれか一つで定義される。
326 .RS 3
327 .IP \(bu 3
328 2 (\fB_XOPEN_SOURCE\fP が 500 未満の値で定義された場合)
329 .IP \(bu
330 199506L (\fB_XOPEN_SOURCE\fP が 500 以上 600 未満の値で定義された場合)
331 .IP \(bu
332 (glibc 2.4 以降)  200112L (\fB_XOPEN_SOURCE\fP が 600 以上 700 未満の値で定義された場合)
333 .IP \(bu
334 (glibc 2.10 以降)  200809L (\fB_XOPEN_SOURCE\fP が 700 以上の値で定義された場合)
335 .IP \(bu
336 古いバージョンの glibc では \fB_POSIX_C_SOURCE\fP の値として 200112L や 200809L は存在せず、
337 \fB_POSIX_C_SOURCE\fP の値がどうなるかは glibc のバージョンにより異なる。
338 .IP \(bu
339 \fB_XOPEN_SOURCE\fP が未定義の場合、 \fB_POSIX_C_SOURCE\fP の値は glibc のバージョンにより異なる。 バージョン
340 2.4 より前の glibc では 199506L、 バージョン 2.4 以降 2.9 未満では 200112L、 glibc 2.10 以降では
341 200809L となる。
342 .RE
343 .PP
344 また、複数のマクロを定義することもできる。 この場合、定義したマクロはすべて有効になる。
345 .SH 準拠
346 POSIX.1 では \fB_POSIX_C_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_XOPEN_SOURCE\fP が規定されている。
347 \fB_XOPEN_SOURCE_EXTENDED\fP は XPG4v2 (別名 SUSv1) で規定されていた。
348
349 \fB_FILE_OFFSET_BITS\fP はどの標準でも規定されていないが、 他のいくつかの実装で採用されている。
350
351 \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP, \fB_DEFAULT_SOURCE\fP, \fB_ATFILE_SOURCE\fP,
352 \fB_GNU_SOURCE\fP, \fB_FORTIFY_SOURCE\fP, \fB_REENTRANT\fP, \fB_THREAD_SAFE\fP は Linux
353 (glibc) 固有である。
354 .SH 注意
355 \fI<features.h>\fP は Linux/glibc 固有のヘッダーファイルである。
356 他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。 このヘッダーファイルは、他のヘッダーファイルにより必要に応じて
357 自動的にインクルードされる。機能検査マクロを利用するために 明示的にインクルードする必要はない。
358
359 上記の機能検査マクロのうちどれが定義されたかにしたがって、 \fI<features.h>\fP は、他の glibc
360 ヘッダーファイルでチェックされる各種の他のマクロを、 内部で定義する。これらのマクロの名前はアンダースコア 2つで始まる (例えば
361 \fB__USE_MISC\fP)。 ユーザープログラムはこれらのマクロを \fI決して\fP 直接定義すべきではない。
362 代わりに、上記のリストにある適切な機能検査マクロを利用すべきである。
363 .SH 例
364 下記のプログラムを使うと、各種の機能検査マクロが glibc のバージョン に応じてどのように設定されるかや、どの機能検査マクロが明示的に
365 設定されるか、を調べることができる。 以下に示すシェルセッションは、 glibc 2.10 のシステムでの実行結果の例である。
366 .in +4n
367 .nf
368
369 $ \fBcc ftm.c\fP
370 $ \fB./a.out\fP
371 _POSIX_SOURCE defined
372 _POSIX_C_SOURCE defined: 200809L
373 _BSD_SOURCE defined
374 _SVID_SOURCE defined
375 _ATFILE_SOURCE defined
376 $ \fBcc \-D_XOPEN_SOURCE=500 ftm.c\fP
377 $ \fB./a.out\fP
378 _POSIX_SOURCE defined
379 _POSIX_C_SOURCE defined: 199506L
380 _XOPEN_SOURCE defined: 500
381 $ \fBcc \-D_GNU_SOURCE ftm.c\fP
382 $ \fB./a.out\fP
383 _POSIX_SOURCE defined
384 _POSIX_C_SOURCE defined: 200809L
385 _ISOC99_SOURCE defined
386 _XOPEN_SOURCE defined: 700
387 _XOPEN_SOURCE_EXTENDED defined
388 _LARGEFILE64_SOURCE defined
389 _BSD_SOURCE defined
390 _SVID_SOURCE defined
391 _ATFILE_SOURCE defined
392 _GNU_SOURCE defined
393 .fi
394 .in
395 .SS プログラムのソース
396 \&
397 .nf
398 /* ftm.c */
399
400 #include <stdio.h>
401 #include <unistd.h>
402 #include <stdlib.h>
403
404 int
405 main(int argc, char *argv[])
406 {
407 #ifdef _POSIX_SOURCE
408     printf("_POSIX_SOURCE defined\en");
409 #endif
410
411 #ifdef _POSIX_C_SOURCE
412     printf("_POSIX_C_SOURCE defined: %ldL\en", (long) _POSIX_C_SOURCE);
413 #endif
414
415 #ifdef _ISOC99_SOURCE
416     printf("_ISOC99_SOURCE defined\en");
417 #endif
418
419 #ifdef _ISOC11_SOURCE
420     printf("_ISOC11_SOURCE defined\en");
421 #endif
422
423 #ifdef _XOPEN_SOURCE
424     printf("_XOPEN_SOURCE defined: %d\en", _XOPEN_SOURCE);
425 #endif
426
427 #ifdef _XOPEN_SOURCE_EXTENDED
428     printf("_XOPEN_SOURCE_EXTENDED defined\en");
429 #endif
430
431 #ifdef _LARGEFILE64_SOURCE
432     printf("_LARGEFILE64_SOURCE defined\en");
433 #endif
434
435 #ifdef _FILE_OFFSET_BITS
436     printf("_FILE_OFFSET_BITS defined: %d\en", _FILE_OFFSET_BITS);
437 #endif
438
439 #ifdef _BSD_SOURCE
440     printf("_BSD_SOURCE defined\en");
441 #endif
442
443 #ifdef _SVID_SOURCE
444     printf("_SVID_SOURCE defined\en");
445 #endif
446
447 #ifdef _DEFAULT_SOURCE
448     printf("_DEFAULT_SOURCE defined\en");
449 #endif
450
451 #ifdef _ATFILE_SOURCE
452     printf("_ATFILE_SOURCE defined\en");
453 #endif
454
455 #ifdef _GNU_SOURCE
456     printf("_GNU_SOURCE defined\en");
457 #endif
458
459 #ifdef _REENTRANT
460     printf("_REENTRANT defined\en");
461 #endif
462
463 #ifdef _THREAD_SAFE
464     printf("_THREAD_SAFE defined\en");
465 #endif
466
467 #ifdef _FORTIFY_SOURCE
468     printf("_FORTIFY_SOURCE defined\en");
469 #endif
470
471     exit(EXIT_SUCCESS);
472 }
473 .fi
474 .SH 関連項目
475 \fBlibc\fP(7), \fBstandards\fP(7)
476
477 .\" But beware: the info libc document is out of date (Jul 07, mtk)
478 \fIinfo libc\fP の "Feature Test Macros" の節。
479
480 \fI/usr/include/features.h\fP
481 .SH この文書について
482 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
483 である。プロジェクトの説明とバグ報告に関する情報は
484 http://www.kernel.org/doc/man\-pages/ に書かれている。