UNIX標準化および実現機能テストマクロ

2130 ワード

ヘッダファイルには多くのPOSIXが定義.1とXSIの記号.しかしPOSIXを除いては.1とXSIの定義に加えて、多くのインプリメンテーションは、これらのヘッダファイルにも独自の定義を加えています.プログラムをコンパイルするときに、POSIX定義のみを使用し、独自の定義を実装する制限を使用しないようにするには、定数を定義する必要があります.POSIX_C_SOURCE.すべてのPOSIX.1ヘッダファイルでは、この定数が使用されます.定数を定義すると、インプリメンテーション固有の定義は除外されます.
注:POSIX.1標準の以前のバージョンが定義されています.POSIX_SOURCE定数.POSIXで1の2001版では、_に置き換えられています.POSIX_C_SOURCE.
定数_POSIX_C_SOURCEおよび_XOPEN_SOURCEは機能テストマクロ(feature test macro)と呼ばれています.すべての機能テストマクロは以下の線で始まります.これらを使用する場合、通常ccコマンドラインでは以下のように定義されます.
cc -D_POSIX_C_SOURCE=200112 file.c

これにより、Cプログラムが任意のヘッダファイルを含む前に、機能テストマクロが定義される.POSIXだけを使いたいなら1を定義すると、ソースファイルの最初の行を次のように設定できます.
#define _POSIX_C_SOURCE 200112

Single UNIX Specification v 3の機能をアプリケーションで使用できるように定数_XOPEN_SOURCEは600と定義されている.
Single UNIX Specificationは、c 99ユーティリティをCコンパイル環境のインタフェースとして定義します.これにより、次のようにファイルをコンパイルできます.
c99 -D_XOPEN_SOURCE=600 file.c -o file

gccコンパイラで1999 ISO C拡張を有効にするには、次のように-std=c 99オプションを使用します.
gcc -D_XOPEN_SOURCE=600 -std=c99 file.c -o file

もう1つの機能テストマクロは、stdC__,ISO C規格に準拠したCコンパイラによって自動的に定義されます.これにより、ISO Cコンパイラと非ISO Cコンパイラの両方でコンパイルできるプログラムを作成することができます.例えば、ISO Cプロトタイプ機能(サポートされている場合)を利用するために、ヘッダファイルには次のものが含まれる場合があります.
#ifdef __STDC__

void *myfunc( const char *, int );

#else

void *myfunc();

#endif

現在のCコンパイラの多くはISO C規格をサポートしていますが、多くのヘッダファイルで使用されています.stdC__機能テストマクロ.
 
このブログの内容は『UNIX環境高度プログラミング』(第2版)から抜粋し、個人学習記録としてのみ使用されている.本書についてはhttp://www.apuebook.com/参照.