OSDN Git Service

(split) LDP: Release pages for LDP v3.39.
[linuxjm/LDP_man-pages.git] / release / man7 / feature_test_macros.7
index 5055769..7c2204a 100644 (file)
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
 .\"
-.\" 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
+.\"*******************************************************************
 .\"
-.\"WORD:       feature test macro      機能検査マクロ
-.\"WORD:       feature test macro requirements 機能検査マクロの要件
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH FEATURE_TEST_MACROS 7 2010-09-10 "Linux" "Linux Programmer's Manual"
+.\"*******************************************************************
+.TH FEATURE_TEST_MACROS 7 2012\-01\-18 Linux "Linux Programmer's Manual"
 .SH 名前
 feature_test_macros \- 機能検査マクロ
 .SH 書式
 .nf
-.B #include <features.h>
+\fB#include <features.h>\fP
 .fi
 .SH 説明
-機能検査マクロ (feature test macro) により、プログラマは
-プログラムがコンパイルされる際にシステムのヘッダファイルにより
+機能検査マクロ (feature test macro) により、プログラマは プログラムがコンパイルされる際にシステムのヘッダファイルにより
 公開される定義を制御することができる。
 
-.B 注意:
-機能検査マクロを機能させるには、機能検査マクロの定義を
-「どのヘッダファイルのインクルードよりも前で」行わなければならない。
-これを実現するには、
-コンパイルコマンドで指定する方法
-.RI ( "cc \-DMACRO=value" )
-と、ソースコード内で必要なマクロの定義を
+\fB注意:\fP 機能検査マクロを機能させるには、機能検査マクロの定義を 「どのヘッダファイルのインクルードよりも前で」行わなければならない。
+これを実現するには、 コンパイルコマンドで指定する方法 (\fIcc \-DMACRO=value\fP)  と、ソースコード内で必要なマクロの定義を
 どのヘッダのインクルードよりも前で行う方法がある。
 
-機能検査マクロを使うと、非標準の定義が公開されないようにでき、
-移植性のあるアプリケーションを作成するのに役立つ。
-他のマクロを使うと、デフォルトでは公開されない非標準の定義を
-公開することができる。
-以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、
-ヘッダファイル
-.I <features.h>
-を調べればよい。
-
+機能検査マクロを使うと、非標準の定義が公開されないようにでき、 移植性のあるアプリケーションを作成するのに役立つ。
+他のマクロを使うと、デフォルトでは公開されない非標準の定義を 公開することができる。 以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、
+ヘッダファイル \fI<features.h>\fP を調べればよい。
 .SS マニュアルページでの機能検査マクロの要件の規定
-関数が機能検査マクロの定義を必要とする場合、
-マニュアルページの書式 (SYNOPSIS) の節に
-以下の形式の注釈を入れる
-(以下の例は
-.BR acct (2)
-のマニュアルページからの引用である)。
+関数が機能検査マクロの定義を必要とする場合、 マニュアルページの書式 (SYNOPSIS) の節に 以下の形式の注釈を入れる (以下の例は
+\fBacct\fP(2)  のマニュアルページからの引用である)。
 .RS 8
 .sp
-.B #include <unistd.h>
+\fB#include <unistd.h>\fP
 .sp
-.BI "int acct(const char *" filename );
+\fBint acct(const char *\fP\fIfilename\fP\fB);\fP
 .sp
 .nf
 .in -4n
 glibc 向けの機能検査マクロの要件
-.RB ( feature_test_macros (7)
+(\fBfeature_test_macros\fP(7)
 参照):
 .fi
 .in
 .sp
-.BR acct ():
-_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500)
+\fBacct\fP(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500)
 .RE
 .PP
-\fB||\fP は、
-.BR acct (2)
-の定義を
-.I <unistd.h>
-から得るには、以下のマクロの定義のいずれかを、どのヘッダファイルの
-インクルードよりも前で行わなければならないことを意味する。
+\fB||\fP は、 \fBacct\fP(2)  の定義を \fI<unistd.h>\fP
+から得るには、以下のマクロの定義のいずれかを、どのヘッダファイルの インクルードよりも前で行わなければならないことを意味する。
 .RS
 .nf
 
@@ -100,8 +75,7 @@ _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500)
 .fi
 .RE
 .PP
-別の方法としては、等価な定義をコンパイル用のコマンドで
-指定することもできる。
+別の方法としては、等価な定義をコンパイル用のコマンドで 指定することもできる。
 .RS
 .nf
 
@@ -110,380 +84,213 @@ cc \-D_XOPEN_SOURCE           # Or any value < 500
 .fi
 .RE
 .PP
-後で述べるが、
-.B 「いくつかの機能検査マクロはデフォルトで定義される」
-点に注意すること。
-このため、「書式」に記載された機能検査マクロを常に
+後で述べるが、 \fB「いくつかの機能検査マクロはデフォルトで定義される」\fP 点に注意すること。 このため、「書式」に記載された機能検査マクロを常に
 明示的に指定する必要があるわけではない。
 
-あまり多くないが、マニュアルページによっては、
-機能検査マクロの要件を以下のように簡単な表現で記載する場合がある。
-(以下の例は
-.BR readahead (2)
-のマニュアルページからの引用である)。
+あまり多くないが、マニュアルページによっては、 機能検査マクロの要件を以下のように簡単な表現で記載する場合がある。 (以下の例は
+\fBreadahead\fP(2)  のマニュアルページからの引用である)。
 .RS
 .nf
 
-.B #define _GNU_SOURCE
-.B #include <fcntl.h>
+\fB#define _GNU_SOURCE\fP
+\fB#include <fcntl.h>\fP
 .sp
-.BI "ssize_t readahead(int " fd ", off64_t *" offset ", size_t " count );
+\fBssize_t readahead(int \fP\fIfd\fP\fB, off64_t *\fP\fIoffset\fP\fB, size_t \fP\fIcount\fP\fB);\fP
 .fi
 .RE
 .PP
-関数定義の公開に使える機能検査マクロが一つだけで、
-デフォルトではそのマクロが定義されない場合に、
-この形式の表現を利用する。
-.SS glibc が解釈する機能検査マクロ
-以下では、Linux glibc 2.\fIx\fP (\fIx\fP > 0) において、
-機能検査マクロがどのように扱われるかを説明する。
+関数定義の公開に使える機能検査マクロが一つだけで、 デフォルトではそのマクロが定義されない場合に、 この形式の表現を利用する。
+.SS "glibc が解釈する機能検査マクロ"
 .\" The details in glibc 2.0 are simpler, but combining a
 .\" a description of them with the details in later glibc versions
 .\" would make for a complicated description.
+以下では、Linux glibc 2.\fIx\fP (\fIx\fP > 0) において、 機能検査マクロがどのように扱われるかを説明する。
 
 Linux/glibc は以下の機能検査マクロを解釈する:
-.TP
-.B __STRICT_ANSI__
-ISO 標準の C。
-.BR gcc (1)
-を
-.I -std=c99
-や
-.I -ansi
-などのフラグを付けて起動した場合、
+.TP 
+\fB__STRICT_ANSI__\fP
+ISO 標準の C。 \fBgcc\fP(1)  を \fI\-std=c99\fP や \fI\-ansi\fP などのフラグを付けて起動した場合、
 このマクロは暗黙のうちに定義される。
-.TP
-.B _POSIX_C_SOURCE
-このマクロを定義すると、ヘッダファイルで
-以下の定義が公開される。
+.TP 
+\fB_POSIX_C_SOURCE\fP
+このマクロを定義すると、ヘッダファイルで以下の定義が公開される。
 .RS
 .IP \(bu 3
-値が 1 の場合、POSIX.1-1990 と ISO C (1990) に準拠する定義が公開される。
+値が 1 の場合、POSIX.1\-1990 と ISO C (1990) に準拠する定義が公開される。
 .IP \(bu
-値が 2 以上の場合、
-POSIX.2-1992 関連の定義も追加で公開される。
+値が 2 以上の場合、 POSIX.2\-1992 関連の定義も追加で公開される。
 .IP \(bu
-値が 199309 以上の場合、
-POSIX.1b (リアルタイム拡張) 関連の定義が追加で公開される。
 .\" 199506L functionality is only available since glibc 2.1
+値が 199309 以上の場合、 POSIX.1b (リアルタイム拡張) 関連の定義が追加で公開される。
 .IP \(bu
-値が 199506 以上の場合、
-POSIX.1c (スレッド) 関連の定義が追加で公開される。
+値が 199506 以上の場合、 POSIX.1c (スレッド) 関連の定義が追加で公開される。
 .IP \(bu
-(glibc 2.3.3 以降)
-値が 200112L 以上の場合、
-(XSI 拡張を除く) POSIX.1-2001 基本仕様に対応する定義が公開される。
+(glibc 2.3.3 以降)  値が 200112L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2001
+基本仕様に対応する定義が公開される。
 .IP \(bu
-(glibc 2.10 以降)
-値が 200809L 以上の場合、
-(XSI 拡張を除く) POSIX.1-2008 基本仕様に対応する定義が公開される。
+(glibc 2.10 以降)  値が 200809L 以上の場合、 (XSI 拡張を除く) POSIX.1\-2008
+基本仕様に対応する定義が公開される。
 .RE
-.TP
-.B _POSIX_SOURCE
-このマクロは廃止予定である。
-このマクロが定義されると、値に関わらず、
-.B _POSIX_C_SOURCE
-を値 1 で定義するのと等価となる。
-.TP
-.B _XOPEN_SOURCE
+.TP 
+\fB_POSIX_SOURCE\fP
+このマクロは廃止予定である。 このマクロが定義されると、値に関わらず、 \fB_POSIX_C_SOURCE\fP を値 1 で定義するのと等価となる。
+.TP 
+\fB_XOPEN_SOURCE\fP
 このマクロを定義すると、ヘッダファイルで以下の定義が公開される。
 .RS
 .IP \(bu 3
-どんな値でも、ヘッダファイルで
-POSIX.1, POSIX.2, XPG4 に準拠する定義が公開される。
+どんな値でも、ヘッダファイルで POSIX.1, POSIX.2, XPG4 に準拠する定義が公開される。
 .IP \(bu
-値が 500 以上の場合、
-SUSv2 (UNIX 98) 関連の定義が追加で公開される。
+値が 500 以上の場合、 SUSv2 (UNIX 98) 関連の定義が追加で公開される。
 .IP \(bu
-(glibc 2.2 以降)
-値が 600 以上の場合、
-SUSv3 (UNIX 03; POSIX.1-2001 基本仕様 + XSI 拡張と同じ)
+(glibc 2.2 以降)  値が 600 以上の場合、 SUSv3 (UNIX 03; POSIX.1\-2001 基本仕様 + XSI 拡張と同じ)
 関連の定義と C99 での定義が追加で公開される。
 .IP \(bu
-(glibc 2.10 以降)
-値が 700 以上の場合、
-SUSv4 (POSIX.1-2008 基本仕様 + XSI 拡張と同じ)
+(glibc 2.10 以降)  値が 700 以上の場合、 SUSv4 (POSIX.1\-2008 基本仕様 + XSI 拡張と同じ)
 関連の定義が追加で公開される。
 .RE
-.TP
-.B _XOPEN_SOURCE_EXTENDED
-このマクロが定義され、さらに
-.B _XOPEN_SOURCE
-が定義されていると、XPG4v2 (SUSv1) UNIX 拡張 (UNIX 95)
-に対応する定義が公開される。
-.B _XOPEN_SOURCE
-が 500 以上の値で定義された場合、このマクロは暗黙のうちに定義される。
-.TP
-.B _ISOC99_SOURCE
-ISO C (1990) の C99 拡張を公開する。
-このマクロは glibc 2.1.3 以降で認識される。
-初期のバージョン 2.1.x の glibc では、これと等価な
-.B _ISOC9X_SOURCE
-という名前のマクロが使われていた
-(なぜなら、C99 標準はまだ確定していなかったからである)。
-.B _ISOC9X_SOURCE
-マクロの使用は廃止されているが、
-glibc は過去との互換性のため今でもこのマクロを認識する。
-.TP
-.B _LARGEFILE64_SOURCE
-LFS (Large File Summit) により
-"暫定拡張 (transitional extension)" Single UNIX Specification
-として規定された代替 API (alternative API) に関する定義を公開する
-(http://opengroup.org/platform/lfs.html 参照)。
-代替 API は新規オブジェクト (関数と型) の集合で構成され、
-その名前は "64" で終わる (例えば、
-.I off_t
-に対応するのは
-.IR off64_t 、
-.BR lseek ()
-に対応するのは
-.BR lseek64 ()
-である)。
-新しいプログラムではこのインタフェースを利用しないこと。
-代わりに
-.I _FILE_OFFSET_BITS=64
-を利用すること。
-.TP
-.B _FILE_OFFSET_BITS
-このマクロを値 64 で定義すると、ファイル I/O とファイルシステム操作に
-関連する 32 ビット版の関数とデータタイプは自動的に 64 ビット版に
-変換される。
-これは、32 ビットシステムで大きなファイル (> 2 ギガバイト) の I/O
-を実行する際に役立つ
-(このマクロを定義すると、コンパイルし直すだけで大きなファイルを
-扱えるプログラムを書くことができる)。
-64 ビットシステムは、もともと 2 ギガバイトより大きなファイルを
-扱えるので、64 ビットシステムではこのマクロは効果を持たない。
-.TP
-.B _BSD_SOURCE
-このマクロを定義すると (値に関わらず) ヘッダファイルで
-BSD 由来の定義が公開される。
-また、このマクロを定義すると、相容れない標準が存在する状況において
-BSD 由来の定義を優先するようになる。
-ただし、
-.BR _SVID_SOURCE ,
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE ,
-.BR _XOPEN_SOURCE ,
-.BR _XOPEN_SOURCE_EXTENDED ,
-.B _GNU_SOURCE
-が一つでも定義された場合には、BSD 由来の定義は優先されなくなる。
-.TP
-.B _SVID_SOURCE
-このマクロを定義すると (値に関わらず) ヘッダファイルで
-System V 由来の定義が公開される
-(SVID == System V Interface Definition;
-.BR standards (7)
-参照)。
-.TP
-.BR _ATFILE_SOURCE " (glibc 2.4 以降)"
-このマクロを定義すると (値に関わらず) ヘッダファイルで
-名前の末尾が "at" の各種の関数の定義が公開される。
-.BR openat (2)
-参照。
-glibc 2.10 以降では、
-.B _POSIX_C_SOURCE
-が 200809L 以上の値で定義された場合には、
+.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
+は過去との互換性のため今でもこのマクロを認識する。
+.TP 
+\fB_ISOC11_SOURCE\fP
+ISO C11 標準に準拠した宣言を公開する。
+このマクロは glibc 2.16 以降で認識される。
+.TP 
+\fB_LARGEFILE64_SOURCE\fP
+LFS (Large File Summit) により "暫定拡張 (transitional extension)" Single UNIX
+Specification として規定された代替 API (alternative API) に関する定義を公開する
+(http://opengroup.org/platform/lfs.html 参照)。 代替 API は新規オブジェクト (関数と型)
+の集合で構成され、 その名前は "64" で終わる (例えば、 \fIoff_t\fP に対応するのは \fIoff64_t\fP、 \fBlseek\fP()
+に対応するのは \fBlseek64\fP()  である)。 新しいプログラムではこのインタフェースを利用しないこと。 代わりに
+\fI_FILE_OFFSET_BITS=64\fP を利用すること。
+.TP 
+\fB_FILE_OFFSET_BITS\fP
+このマクロを値 64 で定義すると、ファイル I/O とファイルシステム操作に 関連する 32 ビット版の関数とデータタイプは自動的に 64 ビット版に
+変換される。 これは、32 ビットシステムで大きなファイル (> 2 ギガバイト) の I/O を実行する際に役立つ
+(このマクロを定義すると、コンパイルし直すだけで大きなファイルを 扱えるプログラムを書くことができる)。 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 由来の定義は優先されなくなる。
+.TP 
+\fB_SVID_SOURCE\fP
+このマクロを定義すると (値に関わらず) ヘッダファイルで System V 由来の定義が公開される (SVID == System V
+Interface Definition; \fBstandards\fP(7)  参照)。
+.TP 
+\fB_ATFILE_SOURCE\fP (glibc 2.4 以降)
+このマクロを定義すると (値に関わらず) ヘッダファイルで 名前の末尾が "at" の各種の関数の定義が公開される。 \fBopenat\fP(2)  参照。
+glibc 2.10 以降では、 \fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義された場合には、
 このマクロも暗黙のうちに定義される。
-.TP
-.B _GNU_SOURCE
-このマクロを定義すると (値に関わらず) 以下のマクロを定義するのと
-等価になる:
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-.BR _ATFILE_SOURCE ,
-.BR _LARGEFILE64_SOURCE ,
-.BR _ISOC99_SOURCE ,
-.BR _XOPEN_SOURCE_EXTENDED ,
-.BR _POSIX_SOURCE ,
-値 200809L の
-.B _POSIX_C_SOURCE
-(バージョン 2.10 より前の glibc では値は 200112L、
-バージョン 2.5 より前の glibc では値は 199506L、
-バージョン 2.1 より前の glibc では値は 199309L),
-値 700 の
-.B _XOPEN_SOURCE
-(バージョン 2.10 より前の glibc では値は 600、
-バージョン 2.2 より前の glibc では値は 500)。
-さらに、各種の GNU 固有の拡張も公開される。
-指定された標準に矛盾があった場合は、
-BSD 由来の定義が優先されなくなる。
-.TP
-.B _REENTRANT
-このマクロを定義すると、いくつかのリエントラント (再入可能) な関数
-定義が公開される。マルチスレッド・プログラムでは、この代わりに
-.I "cc\ \-pthread"
-を使用すること。
-.TP
-.B _THREAD_SAFE
-.B _REENTRANT
-の同義語。
-他のいくつかの実装との互換性を提供するためのもの。
-.TP
-.BR _FORTIFY_SOURCE " (glibc 2.3.4 以降)"
+.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 由来の定義が優先されなくなる。
+.TP 
+\fB_REENTRANT\fP
+このマクロを定義すると、いくつかのリエントラント (再入可能) な関数 定義が公開される。マルチスレッド・プログラムでは、この代わりに \fIcc\ \-pthread\fP を使用すること。
+.TP 
+\fB_THREAD_SAFE\fP
+\fB_REENTRANT\fP の同義語。 他のいくつかの実装との互換性を提供するためのもの。
+.TP 
+\fB_FORTIFY_SOURCE\fP (glibc 2.3.4 以降)
 .\" For more detail, see:
 .\" http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
 .\" [PATCH] Object size checking to prevent (some) buffer overflows
 .\" * 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
-このマクロを定義すると、文字列やメモリの操作を行う様々な関数を
-使用する際にバッファオーバーフローを検出するための軽めのチェックが
-実行されるようになる。すべてのバッファオーバーフローが検出される
-わけではなく、あくまでよくある例についてだけである。
-現在の実装では、以下の関数にチェックが追加されている:
-.BR memcpy (3),
-.BR mempcpy (3),
-.BR memmove (3),
-.BR memset (3),
-.BR stpcpy (3),
-.BR strcpy (3),
-.BR strncpy (3),
-.BR strcat (3),
-.BR strncat (3),
-.BR sprintf (3),
-.BR snprintf (3),
-.BR vsprintf (3),
-.BR vsnprintf (3),
-.BR gets (3).
-.B _FORTIFY_SOURCE
-が 1 に設定された場合、コンパイラの最適化レベルが 1
-.RI ( "gcc\ \-O1" )
-かそれ以上であれば、規格に準拠するプログラムの振る舞いを
-変化させないようなチェックが実行される。
-.B _FORTIFY_SOURCE
-が 2 に設定された場合、さらなるチェックが追加されるが、
-規格に準拠するプログラムのいくつかが失敗する可能性がある。
-いくつかのチェックはコンパイル時に実行でき、コンパイラの警告として
-表示される。他のチェックは実行時に行われ、チェックに失敗した場合
-には実行時エラーとなる。
-このマクロを使用するにはコンパイラの対応が必要であり、
-バージョン 4.0 以降の
-.BR gcc (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
-機能検査マクロが一つも明示的に定義されなかった場合、
-デフォルトで機能検査マクロ
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE =200809L
-が定義される
-(バージョン 2.10 より前の glibc では値は 200112L、
-バージョン 2.4 より前の glibc では値は 199506L、
-バージョン 2.1 より前の glibc では値は 199309L)。
+機能検査マクロが一つも明示的に定義されなかった場合、 デフォルトで機能検査マクロ \fB_BSD_SOURCE\fP, \fB_SVID_SOURCE\fP,
+\fB_POSIX_SOURCE\fP, \fB_POSIX_C_SOURCE\fP=200809L が定義される (バージョン 2.10 より前の glibc
+では値は 200112L、 バージョン 2.4 より前の glibc では値は 199506L、 バージョン 2.1 より前の glibc では値は
+199309L)。
 .PP
-.BR __STRICT_ANSI__ ,
-.BR _ISOC99_SOURCE ,
-.BR _POSIX_SOURCE ,
-.BR _POSIX_C_SOURCE  ,
-.BR _XOPEN_SOURCE ,
-.BR _XOPEN_SOURCE_EXTENDED ,
-.BR _BSD_SOURCE ,
-.B _SVID_SOURCE
-のいずれかが明示的に定義された場合、
-.B _BSD_SOURCE
-と
-.B _SVID_SOURCE
-はデフォルトでは定義されない。
+\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 はデフォルトでは定義されない。
 
-.B _POSIX_SOURCE
-と
-.B _POSIX_C_SOURCE
-が明示的に定義されない場合で、
-.B __STRICT_ANSI__
-が定義されない、もしくは
-.B _XOPEN_SOURCE
-が 500 以上の値で定義されたときには、
+\fB_POSIX_SOURCE\fP と \fB_POSIX_C_SOURCE\fP が明示的に定義されない場合で、 \fB__STRICT_ANSI__\fP
+が定義されない、もしくは \fB_XOPEN_SOURCE\fP が 500 以上の値で定義されたときには、
 .RS 3
 .IP * 3
-.B _POSIX_SOURCE
-が値 1 で定義され、かつ
+\fB_POSIX_SOURCE\fP が値 1 で定義され、かつ
 .IP *
-.B _POSIX_C_SOURCE
-は以下の値のいずれか一つで定義される。
+\fB_POSIX_C_SOURCE\fP は以下の値のいずれか一つで定義される。
 .RS 6
 .IP \(bu 3
-2
-.RB ( _XOPEN_SOURCE
-が 500 未満の値で定義された場合)
+2 (\fB_XOPEN_SOURCE\fP が 500 未満の値で定義された場合)
 .IP \(bu
-199506L
-.RB ( _XOPEN_SOURCE
-が 500 以上 600 未満の値で定義された場合)
+199506L (\fB_XOPEN_SOURCE\fP が 500 以上 600 未満の値で定義された場合)
 .IP \(bu
-(glibc 2.4 以降)
-200112L
-.RB ( XOPEN_SOURCE
-が 600 以上 700 未満の値で定義された場合)
+(glibc 2.4 以降)  200112L (\fBXOPEN_SOURCE\fP が 600 以上 700 未満の値で定義された場合)
 .IP \(bu
-(glibc 2.10 以降)
-200809L
-.RB ( XOPEN_SOURCE
-が 700 以上の値で定義された場合)
+(glibc 2.10 以降)  200809L (\fBXOPEN_SOURCE\fP が 700 以上の値で定義された場合)
 .IP \(bu
-古いバージョンの glibc では
-.B _POSIX_C_SOURCE
-の値として 200112L や 200809L は存在せず、
-.B _POSIX_C_SOURCE
-の値がどうなるかは glibc のバージョンにより異なる。
+古いバージョンの glibc では \fB_POSIX_C_SOURCE\fP の値として 200112L や 200809L は存在せず、
+\fB_POSIX_C_SOURCE\fP の値がどうなるかは glibc のバージョンにより異なる。
 .IP \(bu
-.B _XOPEN_SOURCE
-が未定義の場合、
-.B _POSIX_C_SOURCE
-の値は glibc のバージョンにより異なる。
-バージョン 2.4 より前の glibc では 199506L、
-バージョン 2.4 以降 2.9 未満では 200112L、
-glibc 2.10 以降では 200809L となる。
+\fB_XOPEN_SOURCE\fP が未定義の場合、 \fB_POSIX_C_SOURCE\fP の値は glibc のバージョンにより異なる。 バージョン
+2.4 より前の glibc では 199506L、 バージョン 2.4 以降 2.9 未満では 200112L、 glibc 2.10 以降では
+200809L となる。
 .RE
 .RE
 .PP
-また、複数のマクロを定義することもできる。
-この場合、定義したマクロはすべて有効になる。
+また、複数のマクロを定義することもできる。 この場合、定義したマクロはすべて有効になる。
 .SH 準拠
-POSIX.1 では
-.BR _POSIX_C_SOURCE ,
-.BR _POSIX_SOURCE ,
-.B _XOPEN_SOURCE
-が規定されている。
-.B _XOPEN_SOURCE_EXTENDED
-は XPG4v2 (別名 SUSv1) で規定されていた。
+POSIX.1 では \fB_POSIX_C_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_XOPEN_SOURCE\fP が規定されている。
+\fB_XOPEN_SOURCE_EXTENDED\fP は XPG4v2 (別名 SUSv1) で規定されていた。
 
-.B _FILE_OFFSET_BITS
-はどの標準でも規定されていないが、
-他のいくつかの実装で採用されている。
+\fB_FILE_OFFSET_BITS\fP はどの標準でも規定されていないが、 他のいくつかの実装で採用されている。
 
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-.BR _ATFILE_SOURCE ,
-.BR _GNU_SOURCE ,
-.BR _FORTIFY_SOURCE ,
-.BR _REENTRANT ,
-.B _THREAD_SAFE
-は Linux (glibc) 固有である。
+\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) 固有である。
 .SH 注意
-.I <features.h>
-は Linux/glibc 固有のヘッダファイルである。
-他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。
-このヘッダファイルは、他のヘッダファイルにより必要に応じて
-自動的にインクルードされる。機能検査マクロを利用するために
-明示的にインクルードする必要はない。
+\fI<features.h>\fP は Linux/glibc 固有のヘッダファイルである。
+他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。 このヘッダファイルは、他のヘッダファイルにより必要に応じて
+自動的にインクルードされる。機能検査マクロを利用するために 明示的にインクルードする必要はない。
 
-上記の機能検査マクロのうちどれが定義されたかにしたがって、
-.I <features.h>
-は、他の glibc ヘッダファイルでチェックされる各種の他のマクロを、
-内部で定義する。これらのマクロの名前はアンダースコア 2つで始まる
-(例えば
-.BR __USE_MISC )。
-ユーザプログラムはこれらのマクロを \fI決して\fP 直接定義すべきではない。
+上記の機能検査マクロのうちどれが定義されたかにしたがって、 \fI<features.h>\fP は、他の glibc
+ヘッダファイルでチェックされる各種の他のマクロを、 内部で定義する。これらのマクロの名前はアンダースコア 2つで始まる (例えば
+\fB__USE_MISC\fP)。 ユーザプログラムはこれらのマクロを \fI決して\fP 直接定義すべきではない。
 代わりに、上記のリストにある適切な機能検査マクロを利用すべきである。
 .SH 例
-下記のプログラムを使うと、各種の機能検査マクロが glibc のバージョン
-に応じてどのように設定されるかや、どの機能検査マクロが明示的に
-設定されるか、を調べることができる。
-以下に示すシェル・セッションは、
-glibc 2.10 のシステムでの実行結果の例である。
+下記のプログラムを使うと、各種の機能検査マクロが glibc のバージョン に応じてどのように設定されるかや、どの機能検査マクロが明示的に
+設定されるか、を調べることができる。 以下に示すシェル・セッションは、 glibc 2.10 のシステムでの実行結果の例である。
 .in +4n
 .nf
 
@@ -494,12 +301,12 @@ _POSIX_C_SOURCE defined: 200809L
 _BSD_SOURCE defined
 _SVID_SOURCE defined
 _ATFILE_SOURCE defined
-$ \fBcc -D_XOPEN_SOURCE=500 ftm.c\fP
+$ \fBcc \-D_XOPEN_SOURCE=500 ftm.c\fP
 $ \fB./a.out\fP
 _POSIX_SOURCE defined
 _POSIX_C_SOURCE defined: 199506L
 _XOPEN_SOURCE defined: 500
-$ \fBcc -D_GNU_SOURCE ftm.c\fP
+$ \fBcc \-D_GNU_SOURCE ftm.c\fP
 $ \fB./a.out\fP
 _POSIX_SOURCE defined
 _POSIX_C_SOURCE defined: 200809L
@@ -513,7 +320,7 @@ _ATFILE_SOURCE defined
 _GNU_SOURCE defined
 .fi
 .in
-.SS Program source
+.SS "Program source"
 \&
 .nf
 /* ftm.c */
@@ -526,70 +333,68 @@ int
 main(int argc, char *argv[])
 {
 #ifdef _POSIX_SOURCE
-    printf("_POSIX_SOURCE defined\\n");
+    printf("_POSIX_SOURCE defined\en");
 #endif
 
 #ifdef _POSIX_C_SOURCE
-    printf("_POSIX_C_SOURCE defined: %ldL\\n", (long) _POSIX_C_SOURCE);
+    printf("_POSIX_C_SOURCE defined: %ldL\en", (long) _POSIX_C_SOURCE);
 #endif
 
 #ifdef _ISOC99_SOURCE
-    printf("_ISOC99_SOURCE defined\\n");
+    printf("_ISOC99_SOURCE defined\en");
 #endif
 
 #ifdef _XOPEN_SOURCE
-    printf("_XOPEN_SOURCE defined: %d\\n", _XOPEN_SOURCE);
+    printf("_XOPEN_SOURCE defined: %d\en", _XOPEN_SOURCE);
 #endif
 
 #ifdef _XOPEN_SOURCE_EXTENDED
-    printf("_XOPEN_SOURCE_EXTENDED defined\\n");
+    printf("_XOPEN_SOURCE_EXTENDED defined\en");
 #endif
 
 #ifdef _LARGEFILE64_SOURCE
-    printf("_LARGEFILE64_SOURCE defined\\n");
+    printf("_LARGEFILE64_SOURCE defined\en");
 #endif
 
 #ifdef _FILE_OFFSET_BITS
-    printf("_FILE_OFFSET_BITS defined: %d\\n", _FILE_OFFSET_BITS);
+    printf("_FILE_OFFSET_BITS defined: %d\en", _FILE_OFFSET_BITS);
 #endif
 
 #ifdef _BSD_SOURCE
-    printf("_BSD_SOURCE defined\\n");
+    printf("_BSD_SOURCE defined\en");
 #endif
 
 #ifdef _SVID_SOURCE
-    printf("_SVID_SOURCE defined\\n");
+    printf("_SVID_SOURCE defined\en");
 #endif
 
 #ifdef _ATFILE_SOURCE
-    printf("_ATFILE_SOURCE defined\\n");
+    printf("_ATFILE_SOURCE defined\en");
 #endif
 
 #ifdef _GNU_SOURCE
-    printf("_GNU_SOURCE defined\\n");
+    printf("_GNU_SOURCE defined\en");
 #endif
 
 #ifdef _REENTRANT
-    printf("_REENTRANT defined\\n");
+    printf("_REENTRANT defined\en");
 #endif
 
 #ifdef _THREAD_SAFE
-    printf("_THREAD_SAFE defined\\n");
+    printf("_THREAD_SAFE defined\en");
 #endif
 
 #ifdef _FORTIFY_SOURCE
-    printf("_FORTIFY_SOURCE defined\\n");
+    printf("_FORTIFY_SOURCE defined\en");
 #endif
 
     exit(EXIT_SUCCESS);
 }
 .fi
 .SH 関連項目
-.BR libc (7),
-.BR standards (7)
+\fBlibc\fP(7), \fBstandards\fP(7)
 .sp
-.I "info libc"
-の "Feature Test Macros" の節。
 .\" But beware: the info libc document is out of date (Jul 07, mtk)
+\fIinfo libc\fP の "Feature Test Macros" の節。
 .sp
-.I /usr/include/features.h
+\fI/usr/include/features.h\fP