Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       feature_test_macros - 機能検査マクロ

説明

       機能検査マクロ  (feature test macro) により、プログラマは プログラムがコンパイルされる際に
       システムのヘッダーファイルにより 公開される定義を制御することができる。

       注意: 機能検査マクロを機能させるには、機能検査マクロの定義を  「どのヘッダーファイルのイン
       クルードよりも前で」行わなければならない。 これを実現するには、 コンパイルコマンドで指定す
       る方法 (cc -DMACRO=value)   と、ソースコード内で必要なマクロの定義を  どのヘッダーのインク
       ルードよりも前で行う方法がある。どのヘッダーファイルをインクルードするよりも前にこれらのマ
       クロを定義しなければならないという要件が存在するのは、ヘッダーファイルはお互いに自由にイン
       クルードできるからである。そのため、例えば、以下の例では、ヘッダー  <abc.h> 自身が <xyz.h>
       をインクルードしていると、 _GNU_SOURCE マクロの定義は全く効果がないかもしれない  (このよう
       なインクルードは POSIX では明示的に認められている)。

           #include <abc.h>
           #define _GNU_SOURCE
           #include <xyz.h>

       機能検査マクロを使うと、非標準の定義が公開されないようにでき、  移植性のあるアプリケーショ
       ンを作成するのに役立つ。  他のマクロを使うと、デフォルトでは公開されない非標準の定義を公開
       することができる。

       以下で説明する機能検査マクロのそれぞれの正確な影響を確認するには、        ヘッダーファイル
       <features.h> を調べればよい。 注意: アプリケーションが <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) において、  機能検査マクロがどのように扱われるかを説明す
       る。

       First, though a summary of a few details for the impatient:

       *  The  macros  that you most likely need to use in modern source code are _POSIX_C_SOURCE
          (for definitions from various versions of POSIX.1), _XOPEN_SOURCE (for definitions from
          various  versions  of  SUS),  _GNU_SOURCE  (for  GNU  and/or Linux specific stuff), and
          _DEFAULT_SOURCE (to get definitions that would normally be provided by default).

       *  Certain macros are defined with default values.  Thus, although one or more macros  may
          be  indicated  as being required in the SYNOPSIS of a man page, it may not be necessary
          to define them explicitly.  Full details of the defaults are given later  in  this  man
          page.

       *  Defining  _XOPEN_SOURCE  with  a  value  of 600 or greater produces the same effects as
          defining _POSIX_C_SOURCE with a value of 200112L or greater.  Where one sees

              _POSIX_C_SOURCE >= 200112L

          in the feature test macro requirements in the SYNOPSIS of a man page,  it  is  implicit
          that the following has the same effect:

              _XOPEN_SOURCE >= 600

       *  Defining  _XOPEN_SOURCE  with  a  value  of 700 or greater produces the same effects as
          defining _POSIX_C_SOURCE with a value of 200809L or greater.  Where one sees

              _POSIX_C_SOURCE >= 200809L

          in the feature test macro requirements in the SYNOPSIS of a man page,  it  is  implicit
          that the following has the same effect:

              _XOPEN_SOURCE >= 700

       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  以降) の機能も公開される (言い換えると、 _ISOC99_SOURCE を定義するのと等価
                 である)。

              •  (glibc 2.10 以降)  値が 200809L 以上の場合、 (XSI 拡張を除く) POSIX.1-2008  基本
                 仕様に対応する定義が追加で公開される。

       _POSIX_SOURCE
              このマクロは廃止予定である。               このマクロが定義されると、値に関わらず、
              _POSIX_C_SOURCE を値 1 で定義するのと等価となる。

              Since this macro is obsolete, its usage is generally not documented when discussing
              feature test macro requirements in the man pages.

       _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 で定義される。

              In addition, defining _XOPEN_SOURCE with a value of 500  or  greater  produces  the
              same effects as defining _XOPEN_SOURCE_EXTENDED.

       _XOPEN_SOURCE_EXTENDED
              このマクロが定義され、さらに  _XOPEN_SOURCE が定義されていると、XPG4v2 (SUSv1) UNIX
              拡張 (UNIX 95) に対応する定義が公開される。 _XOPEN_SOURCE が 500 以上の値で定義する
              のは    _XOPEN_SOURCE_EXTENDED   を定義するのと同じ効果となる。新しいソースコードで
              _XOPEN_SOURCE_EXTENDED を使用するのは避けるべきである。

              Since defining _XOPEN_SOURCE with a value of 500 or more has  the  same  effect  as
              defining  _XOPEN_SOURCE_EXTENDED,  the  latter  (obsolete)  feature  test  macro is
              generally not described in the SYNOPSIS in man pages.

       _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 での主要な変更点は国際化文字集合のサポートであった)。

              Invoking the C compiler with the option  -std=c99  produces  the  same  effects  as
              defining this macro.

       _ISOC11_SOURCE (glibc 2.16 以降)
              ISO C11 標準に準拠した宣言を公開する。 このマクロを定義すると (_ISOC99_SOURCE 同様)
              C99 と C95 の機能も有効になる。

              Invoking the C compiler with the option  -std=c11  produces  the  same  effects  as
              defining this macro.

       _LARGEFILE64_SOURCE
              LFS  (Large  File  Summit)  により  "暫定拡張 (transitional extension)" Single UNIX
              Specification として規定された代替 API (alternative API)  に関する定義を公開する  (
              ⟨http://opengroup.org/platform/lfs.html⟩  参照)。 代替 API は新規オブジェクト (関数
              と型) の集合で構成され、 その名前は "64" で終わる  (例えば、  off_t  に対応するのは
              off64_tlseek()  に対応するのは lseek64()  である)。 新しいプログラムではこのマク
              ロを利用しないこと。 代わりに _FILE_OFFSET_BITS=64 を利用すること。

       _LARGEFILE_SOURCE
              このマクロは、歴史的には、ファイルオフセットで long を使う以前の 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 と ISO C99 で必須となっている定義と、もともとは
              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
              Historically, on various C libraries it was necessary to define this macro  in  all
              multithreaded  code.   (Some  C  libraries may still require this.)  In glibc, this
              macro also exposed definitions of certain reentrant functions.

              However, glibc has been thread-safe by default for many years; since glibc 2.3, the
              only  effect  of  defining  _REENTRANT  has  been  to enable one or two of the same
              declarations that are also enabled by defining  _POSIX_C_SOURCE  with  a  value  of
              199606L or greater.

              _REENTRANT  is  now  obsolete.   In  glibc  2.25  and later, defining _REENTRANT is
              equivalent to defining _POSIX_C_SOURCE with the value 199606L.  If a  higher  POSIX
              conformance  level  is selected by any other means (such as _POSIX_C_SOURCE itself,
              _XOPEN_SOURCE, _DEFAULT_SOURCE, or _GNU_SOURCE), then defining  _REENTRANT  has  no
              effect.

              This macro is automatically defined if one compiles with cc -pthread.

       _THREAD_SAFE
              (非推奨の) _REENTRANT の同義語。 他のいくつかの実装との互換性を提供するためのもの。

       _FORTIFY_SOURCE (glibc 2.3.4 以降)
              Defining  this  macro causes some lightweight checks to be performed to detect some
              buffer overflow errors  when  employing  various  string  and  memory  manipulation
              functions  (for  example,  memcpy(3),  memset(3), stpcpy(3), strcpy(3), strncpy(3),
              strcat(3), strncat(3), sprintf(3), snprintf(3), vsprintf(3), vsnprintf(3), gets(3),
              and  wide character variants thereof).  For some functions, argument consistency is
              checked; for example, a check is made that open(2)  has been supplied with  a  mode
              argument  when the specified flags include O_CREAT.  Not all problems are detected,
              just some common cases.

              _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,  _ISOC11_SOURCE  (glibc   2.18   以降),   _POSIX_SOURCE,
       _POSIX_C_SOURCE,  _XOPEN_SOURCE,  _XOPEN_SOURCE_EXTENDED  (glibc  2.11  以前), _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) で規定されていたが、 SUSv2 以降には存在しな
       い。 _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 <stdint.h>
       #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: %jdL\n",
                   (intmax_t) _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), system_data_types(7)

       info libc の "Feature Test Macros" の節。

       /usr/include/features.h

この文書について

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