OSDN Git Service

(split) LDP: Update release (3.64)
[linuxjm/LDP_man-pages.git] / release / man7 / feature_test_macros.7
index 84b6385..7b17303 100644 (file)
@@ -1,7 +1,6 @@
-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
 .\" This manpage is Copyright (C) 2006, Michael Kerrisk
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
 .\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
+.\"
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
 .\"
 .\" 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>
 .\"
-.\"WORD:       feature test macro      µ¡Ç½¸¡ºº¥Þ¥¯¥í
-.\"WORD:       feature test macro requirements µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï
-.\"
-.TH FEATURE_TEST_MACROS 7 2009-12-13 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-feature_test_macros \- µ¡Ç½¸¡ºº¥Þ¥¯¥í
-.SH ½ñ¼°
+.TH FEATURE_TEST_MACROS 7 2014\-03\-20 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) ¤Ë¤è¤ê¡¢¥×¥í¥°¥é¥Þ¤Ï
-¥×¥í¥°¥é¥à¤¬¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤ëºÝ¤Ë¥·¥¹¥Æ¥à¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ë¤è¤ê
-¸ø³«¤µ¤ì¤ëÄêµÁ¤òÀ©¸æ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-¤³¤Îµ¡Ç½¤ò»È¤¦¤È¡¢Èóɸ½à¤ÎÄêµÁ¤¬¸ø³«¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤Ç¤­¡¢
-°Ü¿¢À­¤Î¤¢¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òºîÀ®¤¹¤ë¤Î¤ËÌòΩ¤Ä¡£
-¾¤Î¥Þ¥¯¥í¤ò»È¤¦¤È¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¸ø³«¤µ¤ì¤Ê¤¤Èóɸ½à¤ÎÄêµÁ¤ò
-¸ø³«¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-°Ê²¼¤ÇÀâÌÀ¤¹¤ëµ¡Ç½¸¡ºº¥Þ¥¯¥í¤Î¤½¤ì¤¾¤ì¤ÎÀµ³Î¤Ê±Æ¶Á¤ò³Îǧ¤¹¤ë¤Ë¤Ï¡¢
-¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë
-.I <features.h>
-¤òÄ´¤Ù¤ì¤Ð¤è¤¤¡£
-
-µ¡Ç½¸¡ºº¥Þ¥¯¥í¤òµ¡Ç½¤µ¤»¤ë¤Ë¤Ï¡¢µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÄêµÁ¤ò
-¡Ö¤É¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥¯¥ë¡¼¥É¤è¤ê¤âÁ°¤Ç¡×¹Ô¤ï¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-¤³¤ì¤ò¼Â¸½¤¹¤ë¤Ë¤Ï¡¢
-¥³¥ó¥Ñ¥¤¥ë¥³¥Þ¥ó¥É¤Ç»ØÄꤹ¤ëÊýË¡
-.RI ( "cc \-DMACRO=value" )
-¤È¡¢¥½¡¼¥¹¥³¡¼¥ÉÆâ¤ÇɬÍפʥޥ¯¥í¤ÎÄêµÁ¤ò
-¤É¤Î¥Ø¥Ã¥À¤Î¥¤¥ó¥¯¥ë¡¼¥É¤è¤ê¤âÁ°¤Ç¹Ô¤¦ÊýË¡¤¬¤¢¤ë¡£
-.SS ¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ç¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï¤Îµ¬Äê
-´Ø¿ô¤¬µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÄêµÁ¤òɬÍפȤ¹¤ë¾ì¹ç¡¢
-¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Î½ñ¼° (SYNOPSIS) ¤ÎÀá¤Ë
-°Ê²¼¤Î·Á¼°¤ÎÃí¼á¤òÆþ¤ì¤ë
-(°Ê²¼¤ÎÎã¤Ï
-.BR chmod (2)
-¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤«¤é¤Î°úÍѤǤ¢¤ë)¡£
-.RS
+.SH 説明
+機能検査マクロ (feature test macro) により、プログラマは プログラムがコンパイルされる際にシステムのヘッダファイルにより
+公開される定義を制御することができる。
+
+\fB注意:\fP 機能検査マクロを機能させるには、機能検査マクロの定義を 「どのヘッダファイルのインクルードよりも前で」行わなければならない。
+これを実現するには、 コンパイルコマンドで指定する方法 (\fIcc \-DMACRO=value\fP)  と、ソースコード内で必要なマクロの定義を
+どのヘッダのインクルードよりも前で行う方法がある。
+
+機能検査マクロを使うと、非標準の定義が公開されないようにでき、 移植性のあるアプリケーションを作成するのに役立つ。
+他のマクロを使うと、デフォルトでは公開されない非標準の定義を 公開することができる。 以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、
+ヘッダファイル \fI<features.h>\fP を調べればよい。
+.SS マニュアルページでの機能検査マクロの要件の規定
+関数が機能検査マクロの定義を必要とする場合、 マニュアルページの書式 (SYNOPSIS) の節に 以下の形式の注釈を入れる (以下の例は
+\fBacct\fP(2)  のマニュアルページからの引用である)。
+.RS 8
 .sp
-.B #include <sys/stat.h>
+\fB#include <unistd.h>\fP
 .sp
-.BI "int chmod(const char *" path ", mode_t " mode );
-.br
-.BI "int fchmod(int " fd ", mode_t " mode );
+\fBint acct(const char *\fP\fIfilename\fP\fB);\fP
 .sp
+.nf
 .in -4n
-glibc ¸þ¤±¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï
-.RB ( feature_test_macros (7)
-»²¾È):
+glibc 向けの機能検査マクロの要件
+(\fBfeature_test_macros\fP(7)
+参照):
+.fi
 .in
 .sp
-.BR fchmod ():
-_BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500
+\fBacct\fP(): _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE\ <\ 500)
 .RE
 .PP
-\fB||\fP ¤Ï¡¢
-.BR fchmod (2)
-¤ÎÄêµÁ¤ò
-.I <sys/stat.h>
-¤«¤éÆÀ¤ë¤Ë¤Ï¡¢°Ê²¼¤Î¥Þ¥¯¥í¤ÎÄêµÁ¤Î¤¤¤º¤ì¤«¤ò¡¢¤É¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Î
-¥¤¥ó¥¯¥ë¡¼¥É¤è¤ê¤âÁ°¤Ç¹Ô¤ï¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
+\fB||\fP は、 \fBacct\fP(2)  の定義を \fI<unistd.h>\fP
+から得るには、以下のマクロの定義のいずれかを、どのヘッダファイルの インクルードよりも前で行わなければならないことを意味する。
 .RS
 .nf
 
 #define _BSD_SOURCE
-#define _XOPEN_SOURCE 500     /* or any value > 500 */
+#define _XOPEN_SOURCE        /* 500 未満の任意の値 */
 .fi
 .RE
 .PP
-Ê̤ÎÊýË¡¤È¤·¤Æ¤Ï¡¢Åù²Á¤ÊÄêµÁ¤ò¥³¥ó¥Ñ¥¤¥ëÍѤΥ³¥Þ¥ó¥É¤Ç
-»ØÄꤹ¤ë¤³¤È¤â¤Ç¤­¤ë¡£
+別の方法としては、等価な定義をコンパイル用のコマンドで 指定することもできる。
 .RS
 .nf
 
 cc \-D_BSD_SOURCE
-cc \-D_XOPEN_SOURCE=500        # Or any value > 500
+cc \-D_XOPEN_SOURCE           # 500 未満の任意の値
 .fi
 .RE
 .PP
-¸å¤Ç½Ò¤Ù¤ë¤¬¡¢
-.B ¡Ö¤¤¤¯¤Ä¤«¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤Ï¥Ç¥Õ¥©¥ë¥È¤ÇÄêµÁ¤µ¤ì¤ë¡×
-ÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È¡£
-¤³¤Î¤¿¤á¡¢¡Ö½ñ¼°¡×¤Ëµ­ºÜ¤µ¤ì¤¿µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ò¾ï¤Ë
-ÌÀ¼¨Åª¤Ë»ØÄꤹ¤ëɬÍפ¬¤¢¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£
-
-¤¢¤Þ¤ê¿¤¯¤Ê¤¤¤¬¡¢¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤Ë¤è¤Ã¤Æ¤Ï¡¢
-µ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï¤ò°Ê²¼¤Î¤è¤¦¤Ë´Êñ¤Êɽ¸½¤Çµ­ºÜ¤¹¤ë¾ì¹ç¤¬¤¢¤ë¡£
-(°Ê²¼¤ÎÎã¤Ï
-.BR readahead (2)
-¤Î¥Þ¥Ë¥å¥¢¥ë¥Ú¡¼¥¸¤«¤é¤Î°úÍѤǤ¢¤ë)¡£
+後で述べるが、 \fB「いくつかの機能検査マクロはデフォルトで定義される」\fP 点に注意すること。 このため、「書式」に記載された機能検査マクロを常に
+明示的に指定する必要があるわけではない。
+
+あまり多くないが、マニュアルページによっては、 機能検査マクロの要件を以下のように簡単な表現で記載する場合がある。 (以下の例は
+\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
-.B _POSIX_C_SOURCE
-¤³¤Î¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤È¡¢¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ç
-°Ê²¼¤ÎÄêµÁ¤¬¸ø³«¤µ¤ì¤ë¡£
+Linux/glibc は以下の機能検査マクロを解釈する:
+.TP 
+\fB__STRICT_ANSI__\fP
+ISO 標準の C。 \fBgcc\fP(1)  を \fI\-std=c99\fP や \fI\-ansi\fP などのフラグを付けて起動した場合、
+このマクロは暗黙のうちに定義される。
+.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
+.\" 199506L functionality is available only 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 ´ðËÜ»ÅÍͤËÂбþ¤¹¤ëÄêµÁ¤¬¸ø³«¤µ¤ì¤ë¡£
+(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 ´ðËÜ»ÅÍͤËÂбþ¤¹¤ëÄêµÁ¤¬¸ø³«¤µ¤ì¤ë¡£
+(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 ³ÈÄ¥¤ÈƱ¤¸)
-´ØÏ¢¤ÎÄêµÁ¤È C99 ¤Ç¤ÎÄêµÁ¤¬ÄɲäǸø³«¤µ¤ì¤ë¡£
+(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
-.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 °Ê¹ß)"
+.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_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 (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
+Specification として規定された代替 API (alternative API) に関する定義を公開する (
+.UR http:\:/\:/opengroup.org\:/platform\:/lfs.html
+.UE
+参照)。 代替 API は新規オブジェクト
+(関数と型) の集合で構成され、 その名前は "64" で終わる (例えば、 \fIoff_t\fP に対応するのは \fIoff64_t\fP、
+\fBlseek\fP()  に対応するのは \fBlseek64\fP()  である)。 新しいプログラムではこのマクロを利用しないこと。 代わりに
+\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 ビットシステムではこのマクロは効果を持たない。
+.TP 
+\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 (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)  参照。
+glibc 2.10 以降では、 \fB_POSIX_C_SOURCE\fP が 200809L 以上の値で定義された場合には、
+このマクロも暗黙のうちに定義される。
+.TP 
+\fB_GNU_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)。
+
+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 を使用すること。
+.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)
-¤ÇÍøÍѤǤ­¤ë¡£
-.SS ¥Ç¥Õ¥©¥ë¥È¤ÎÄêµÁ¡¢°ÅÌÛ¤ÎÄêµÁ¡¢ÁȤ߹ç¤ï¤»ÄêµÁ
+このマクロを定義すると、文字列やメモリの操作を行う様々な関数を使用する際にバッファオーバーフローを検出するための軽めのチェックが実行されるようになる。すべてのバッファオーバーフローが検出されるわけではなく、あくまでよくある例についてだけである。
+
+ついてだけである。 現在の実装では、以下の関数にチェックが追加されている: \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 (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
-.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
-¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÄêµÁ¤µ¤ì¤Ê¤¤¡£
-
-.B _POSIX_SOURCE
-¤È
-.B _POSIX_C_SOURCE
-¤¬ÌÀ¼¨Åª¤ËÄêµÁ¤µ¤ì¤Ê¤¤¾ì¹ç¤Ç¡¢
-.B __STRICT_ANSI__
-¤¬ÄêµÁ¤µ¤ì¤Ê¤¤¡¢¤â¤·¤¯¤Ï
-.B _XOPEN_SOURCE
-¤¬ 500 °Ê¾å¤ÎÃͤÇÄêµÁ¤µ¤ì¤¿¤È¤­¤Ë¤Ï¡¢
-.RS 3
+\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 (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 以上の値で定義されたときには、
 .IP * 3
-.B _POSIX_SOURCE
-¤¬ÃÍ 1 ¤ÇÄêµÁ¤µ¤ì¡¢¤«¤Ä
+\fB_POSIX_SOURCE\fP が値 1 で定義され、かつ
 .IP *
-.B _POSIX_C_SOURCE
-¤Ï°Ê²¼¤ÎÃͤΤ¤¤º¤ì¤«°ì¤Ä¤ÇÄêµÁ¤µ¤ì¤ë¡£
-.RS 6
+\fB_POSIX_C_SOURCE\fP は以下の値のいずれか一つで定義される。
+.RS 3
 .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 (\fB_XOPEN_SOURCE\fP が 600 以上 700 未満の値で定義された場合)
 .IP \(bu
-(glibc 2.10 °Ê¹ß)
-200809L
-.RB ( XOPEN_SOURCE
-¤¬ 700 °Ê¾å¤ÎÃͤÇÄêµÁ¤µ¤ì¤¿¾ì¹ç)
+(glibc 2.10 以降)  200809L (\fB_XOPEN_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 ¤È¤Ê¤ë¡£
-.RE
+\fB_XOPEN_SOURCE\fP が未定義の場合、 \fB_POSIX_C_SOURCE\fP の値は glibc のバージョンにより異なる。 バージョン
+2.4 より前の glibc では 199506L、 バージョン 2.4 以降 2.9 未満では 200112L、 glibc 2.10 以降では
+200809L となる。
 .RE
 .PP
-¤Þ¤¿¡¢Ê£¿ô¤Î¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¤³¤È¤â¤Ç¤­¤ë¡£
-¤³¤Î¾ì¹ç¡¢ÄêµÁ¤·¤¿¥Þ¥¯¥í¤Ï¤¹¤Ù¤ÆÍ­¸ú¤Ë¤Ê¤ë¡£
-.SH ½àµò
-POSIX.1 ¤Ç¤Ï
-.BR _POSIX_C_SOURCE ,
-.BR _POSIX_SOURCE ,
-.B _XOPEN_SOURCE
-¤¬µ¬Äꤵ¤ì¤Æ¤¤¤ë¡£
-.B _XOPEN_SOURCE_EXTENDED
-¤Ï XPG4v2 (ÊÌ̾ SUSv1) ¤Çµ¬Äꤵ¤ì¤Æ¤¤¤¿¡£
-
-.B _FILE_OFFSET_BITS
-¤Ï¤É¤Îɸ½à¤Ç¤âµ¬Äꤵ¤ì¤Æ¤¤¤Ê¤¤¤¬¡¢
-¾¤Î¤¤¤¯¤Ä¤«¤Î¼ÂÁõ¤ÇºÎÍѤµ¤ì¤Æ¤¤¤ë¡£
-
-.BR _BSD_SOURCE ,
-.BR _SVID_SOURCE ,
-.BR _ATFILE_SOURCE ,
-.BR _GNU_SOURCE ,
-.BR _FORTIFY_SOURCE ,
-.BR _REENTRANT ,
-.B _THREAD_SAFE
-¤Ï Linux (glibc) ¸ÇÍ­¤Ç¤¢¤ë¡£
-.SH Ãí°Õ
-.I <features.h>
-¤Ï Linux/glibc ¸ÇÍ­¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë¡£
-¾¤Î¥·¥¹¥Æ¥à¤Ë¤âƱÍͤÎÌÜŪ¤Î¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¤¬¡¢ÉáÄ̤ϰ㤦̾Á°¤Ç¤¢¤ë¡£
-¤³¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ï¡¢Â¾¤Î¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ë¤è¤êɬÍפ˱þ¤¸¤Æ
-¼«Æ°Åª¤Ë¥¤¥ó¥¯¥ë¡¼¥É¤µ¤ì¤ë¡£µ¡Ç½¸¡ºº¥Þ¥¯¥í¤òÍøÍѤ¹¤ë¤¿¤á¤Ë
-ÌÀ¼¨Åª¤Ë¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ëɬÍפϤʤ¤¡£
-
-¾åµ­¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤Î¤¦¤Á¤É¤ì¤¬ÄêµÁ¤µ¤ì¤¿¤«¤Ë¤·¤¿¤¬¤Ã¤Æ¡¢
-.I <features.h>
-¤Ï¡¢Â¾¤Î glibc ¥Ø¥Ã¥À¥Õ¥¡¥¤¥ë¤Ç¥Á¥§¥Ã¥¯¤µ¤ì¤ë³Æ¼ï¤Î¾¤Î¥Þ¥¯¥í¤ò¡¢
-ÆâÉô¤ÇÄêµÁ¤¹¤ë¡£¤³¤ì¤é¤Î¥Þ¥¯¥í¤Î̾Á°¤Ï¥¢¥ó¥À¡¼¥¹¥³¥¢ 2¤Ä¤Ç»Ï¤Þ¤ë
-(Î㤨¤Ð
-.BR __USE_MISC )¡£
-¥æ¡¼¥¶¥×¥í¥°¥é¥à¤Ï¤³¤ì¤é¤Î¥Þ¥¯¥í¤ò \fI·è¤·¤Æ\fP Ä¾ÀÜÄêµÁ¤¹¤Ù¤­¤Ç¤Ï¤Ê¤¤¡£
-Âå¤ï¤ê¤Ë¡¢¾åµ­¤Î¥ê¥¹¥È¤Ë¤¢¤ëŬÀڤʵ¡Ç½¸¡ºº¥Þ¥¯¥í¤òÍøÍѤ¹¤Ù¤­¤Ç¤¢¤ë¡£
-.SH Îã
-²¼µ­¤Î¥×¥í¥°¥é¥à¤ò»È¤¦¤È¡¢³Æ¼ï¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ glibc ¤Î¥Ð¡¼¥¸¥ç¥ó
-¤Ë±þ¤¸¤Æ¤É¤Î¤è¤¦¤ËÀßÄꤵ¤ì¤ë¤«¤ä¡¢¤É¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ÌÀ¼¨Åª¤Ë
-ÀßÄꤵ¤ì¤ë¤«¡¢¤òÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
-°Ê²¼¤Ë¼¨¤¹¥·¥§¥ë¡¦¥»¥Ã¥·¥ç¥ó¤Ï¡¢
-glibc 2.10 ¤Î¥·¥¹¥Æ¥à¤Ç¤Î¼Â¹Ô·ë²Ì¤ÎÎã¤Ç¤¢¤ë¡£
+また、複数のマクロを定義することもできる。 この場合、定義したマクロはすべて有効になる。
+.SH 準拠
+POSIX.1 では \fB_POSIX_C_SOURCE\fP, \fB_POSIX_SOURCE\fP, \fB_XOPEN_SOURCE\fP が規定されている。
+\fB_XOPEN_SOURCE_EXTENDED\fP は XPG4v2 (別名 SUSv1) で規定されていた。
+
+\fB_FILE_OFFSET_BITS\fP はどの標準でも規定されていないが、 他のいくつかの実装で採用されている。
+
+\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 固有のヘッダファイルである。
+他のシステムにも同様の目的のファイルがあるが、普通は違う名前である。 このヘッダファイルは、他のヘッダファイルにより必要に応じて
+自動的にインクルードされる。機能検査マクロを利用するために 明示的にインクルードする必要はない。
+
+上記の機能検査マクロのうちどれが定義されたかにしたがって、 \fI<features.h>\fP は、他の glibc
+ヘッダファイルでチェックされる各種の他のマクロを、 内部で定義する。これらのマクロの名前はアンダースコア 2つで始まる (例えば
+\fB__USE_MISC\fP)。 ユーザプログラムはこれらのマクロを \fI決して\fP 直接定義すべきではない。
+代わりに、上記のリストにある適切な機能検査マクロを利用すべきである。
+.SH 例
+下記のプログラムを使うと、各種の機能検査マクロが glibc のバージョン に応じてどのように設定されるかや、どの機能検査マクロが明示的に
+設定されるか、を調べることができる。 以下に示すシェル・セッションは、 glibc 2.10 のシステムでの実行結果の例である。
 .in +4n
 .nf
 
@@ -491,12 +387,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
@@ -510,7 +406,7 @@ _ATFILE_SOURCE defined
 _GNU_SOURCE defined
 .fi
 .in
-.SS Program source
+.SS プログラムのソース
 \&
 .nf
 /* ftm.c */
@@ -523,70 +419,80 @@ 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 _ISOC11_SOURCE
+    printf("_ISOC11_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 _DEFAULT_SOURCE
+    printf("_DEFAULT_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)
-.sp
-.I "info libc"
-¤Î "Feature Test Macros" ¤ÎÀá¡£
+.SH 関連項目
+\fBlibc\fP(7), \fBstandards\fP(7)
+
 .\" But beware: the info libc document is out of date (Jul 07, mtk)
-.sp
-.I /usr/include/features.h
+\fIinfo libc\fP の "Feature Test Macros" の節。
+
+\fI/usr/include/features.h\fP
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.64 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。