フィーチャー・テスト・マクロ

ヘッダーに定義されているシンボルの多くは、フィーチャー・テスト・マクロで「プロテクト」されています。これらの「プロテクト」されたシンボルは、ユーザーが以下のいずれかの方式を使って、フィーチャー・テスト・マクロを #define によって定義しない限り、アプリケーションに対して可視になりません。 LANGLVL コンパイラー・オプションは、これらのマクロの定義/定義解除を行いません。
AMODE 64 では、以下のフィーチャー・テスト・マクロは廃止されました。 詳しくは、フィーチャー・テスト・マクロの説明を参照してください。
以下のフィーチャー・テスト・マクロは AMODE 64 ではサポートされません。

表 1 は、フィーチャー・テスト・マクロと標準との関連を要約したものです。「はい」は、フィーチャー・テスト・マクロが、標準に関連したシンボルを可視にすることを示します。

POSIX 標準に適用されないフィーチャー・テスト・マクロは、この表に は記載されていません。

表 1. フィーチャー・テスト・マクロおよび標準
フィーチャー・テスト・マクロ POSIX.1 POSIX.1a POSIX.2 POSIX.4a XPG4.2 XPG4.2 Ext SUSv3
_ALL_SOURCE はい はい はい はい はい はい  
_ALL_SOURCE_NO_THREADS はい はい はい   はい はい  
_OE_SOCKETS はい はい          
_OPEN_DEFAULT はい はい はい        
_OPEN_SOURCE 1 はい はい はい はい      
_OPEN_SOURCE 2 はい はい はい はい はい はい  
_OPEN_SOURCE 3 はい はい はい はい はい はい  
_OPEN_SYS はい はい はい はい      
_OPEN_SYS_IPC_EXTENSIONS はい はい     はい    
_OPEN_SYS_PTY_EXTENSIONS はい はい     はい はい  
_OPEN_SYS_SOCK_EXT はい はい   はい はい    
_OPEN_THREADS はい はい   はい      
_POSIX1_SOURCE 1 はい            
_POSIX1_SOURCE 2 はい はい          
_POSIX_C_SOURCE 1 はい            
_POSIX_C_SOURCE 2 はい   はい        
_POSIX_C_SOURCE 200112L はい はい はい       はい
_POSIX_SOURCE はい            
_XOPEN_SOURCE はい   はい   はい    
_XOPEN_SOURCE_EXTENDED 1 はい   はい   はい はい  
_XOPEN_SOURCE 500 はい   はい   はい はい  
_XOPEN_SOURCE 600 はい はい はい   はい はい はい

以下のフィーチャー・テスト・マクロがサポートされます。

_ALL_SOURCE

このフィーチャー・テスト・マクロは以下のネーム・スペースを公開します。 POSIX.1、POSIX.1a、POSIX.2、POSIX.4a draft 6、XPG4、および XPG4.2。 同様に、Single UNIX Specification、バージョン 2 から引き継がれた z/OS® UNIX への追加。

さらに、_ALL_SOURCE を定義すると、ANSI、POSIX、または XPG4 では許可されていないが、C 言語アプリケーションを z/OS UNIX System サービスに移植するための支援機能として提供されている、多くのシンボルを可視にします。以下のフィーチャー・テスト・マクロにより可視にされる拡張機能は、_ALL_SOURCE によって暗黙的に定義されます。

  • _OPEN_SYS_DIR_EXT
  • _OPEN_SYS_EXT
  • _OPEN_SYS_IPC_EXTENSIONS
  • _OPEN_SYS_MAP_EXTENTION
  • _OPEN_SYS_PTY_EXTENSIONS
  • _OPEN_SYS_SOCK_EXT
  • _OPEN_SYS_SOCK_EXT2
  • _OPEN_SYS_SOCK_IPV6

_OPEN_THREADS がアプリケーションに明示的に定義されていない場合、_ALL_SOURCE は_OPEN_THREADS 1 を定義します。ただし、以下のいずれかが提供される場合を除きます。

  • _ALL_SOURCE_NO_THREADS
  • _UNIX03_THREADS
  • _XOPEN_SOURCE 600

_ALL_SOURCE は、Single UNIX Specification、バージョン 3 で最初に導入された、マクロ定義 _XOPEN_SOURCE 600 または _POSIX_C_SOURCE 200112L にある機能を公開しませんが、_OPEN_THREADS を 2 または 3 に定義することによって可視になったインターフェースは許容します。

ネーム・スペースを固定させるために、POSIX、XOPEN、または MVS™ にかかわらず、将来の拡張では _ALL_SOURCE の定義を拡張しません。シンボルをこのネーム・スペースに追加するためには、将来の機能拡張では、新しい、明示的フィーチャー・テスト・マクロが必要です。

_ALL_SOURCE_NO_THREADS

このフィーチャー・テスト・マクロは、スレッド化サービス(_OPEN_THREADS) を公開しないことを除いて、_ALL_SOURCE と同じ機能を提供します。

_IEEEV1_COMPATIBILITY

1999 年に、IBM® Java グループのサポートで、C/C++ ランタイム・ライブラリーが IEEE754 浮動小数点演算サポートを提供しました。 Java™ 言語の 数学ライブラリーにはビット単位という要件がありました。つまり、すべてのプラットフォームが、Sun Microsystems の fdlibm (Freely Distributed LIBM) ライブラリーと 同じ結果を生成する必要がありました。そのため、Sun Microsystems の fdlibm コードは、IEEE754 浮動小数点演算サポートを提供するために、C/C++ ランタイム・ライブラリーに移植されました。C/C++ ランタイム・ライブラリーの 1999 年リリースの IEEE754 浮動小数点数学サポートに続き、IBM の Java グループは独自の IEEE754 浮動小数点数演算のサポートを提供し、このサポートで C/C++ ランタイム・ライブラリーを使用することはなくなりました。

z/OS V1R9 以降、オリジナルの fdlibm 関数のサブセットは、パフォーマンスと正確性が向上するように設計された新しいバージョンと置き換えられます。これらの関数の 新しいバージョンは、既存のエントリー・ポイントで置き換えられます。しかし、IBM では、マイグレーションを支援するために、オリジナル・ バージョンの fdlibm 用の新しいエントリー・ポイントを提供しています。特に処置を講じないアプリケーションは、 更新済みの関数を自動的に使用します。オリジナルの関数にアクセスする 2 つの方法があります。

このフィーチャー・テスト・マクロは、以下の C/C++ 関数の環境を提供します。

  • <math.h> をインクルードしない
  • <math.h> を組み込み、_FP_MODE_VARIABLE フィーチャー・テスト・マクロを定義する

上記のいずれも、アプリケーションが、コンパイル単位で呼び出された浮動小数点数学関数に関して、いわゆる「変数」モードで実行されることになります。環境変数の詳細については、「z/OS XL C/C++ プログラミング・ガイド」を参照してください。

2 番目の方法は、ここに記述されているフィーチャー・テスト・マクロを使用する方法で、それは <math.h> を組み込んで _FP_MODE_VARIABLE フィーチャー・テスト・マクロを定義していないアプリケーションが使用できます。

アプリケーションが2 番目の方法の規則に準拠する場合、このフィーチャー・テスト・マクロを使用して、以下の関数のオリジナル fdlibm バージョンにアクセスできます。
acos(), acosh(), asin(), asinh(), atan(), atanh(), atan2(), 
cbrt(), cos(), cosh(), erf(), erfc(), exp(), expm1(), gamma(), 
hypot(), lgamma(), log(), log1p(), log10(), pow(), rint(), sin(), 
sinh(), tan(), tanh() 

オリジナルの fdlibm バージョンにアクセスするためには、アプリケーションを再コンパイルおよび再リンクする必要があります。

_ISOC99_SOURCE

このフィーチャー・テスト・マクロは、C99 をサポートするように設計されたコンパイラーを必要とするインターフェースを除く、ISO/IEC 9899:1999 に関連したインターフェースすべてを使用可能にします。また、このフィーチャー・テスト・マクロは、通常 _MSE_PROTOS フィーチャー・テスト・マクロによって公開されるネーム・スペースも公開します (_NOISOC99_SOURCE が定義されていない限り)。_ISOC99_SOURCE フィーチャー・テスト・マクロは、C99 をサポートするように設計されたコンパイラーを使用する場合には必要ありません。

注: 最初のヘッダーをインクルードする前に _NOISOC99_SOURCE と _ISOC99_SOURCE の両方を定義した場合、新しい C99 インターフェースは公開されません。
_LARGE_FILES

_LARGE_FILES フィーチャー・テスト・マクロは、特定の関数が、2 GB のサイズより大きい MVS データ・セットおよび z/OS UNIX ファイル、ならびに 4 GB のサイズより大きい VSAM 拡張アドレッシング機能のデータ・セットを操作できるようにします。このフィーチャー・テスト・マクロを選択する場合、このマクロをコンパイラー・オプション LANGLVL(LONGLONG) と一緒に使用して、long long データ型をアクティブにする必要があります。

次の関数が、該当するオフセットおよびファイル・サイズ値を 64 ビット値に拡張することによって、すべてのサイズの z/OS UNIX ファイルを操作できるようになります。
creat(), fcntl(), fgetpos(), fopen(), freopen(), fseek(), fseeko(),
fsetpos(), fstat(), ftell(), ftello(), ftruncate(), getrlimit(), 
lockf(), lseek(), lstat(), mmap(), open(), read(), setrlimit(), 
stat(), truncate(), write()

また、_LARGE_FILES フィーチャー・テスト・マクロは、パラメーターと戻りの型の幅を 64 ビットに拡張することによって、fseeko() および ftello() 関数が、2 GB より大きい MVS データ・セットおよび 4 GB より大きい VSAM データ・セットを操作できるようにします。fgetpos()、fopen()、freopen()、および fsetpos() 関数は、これらのサイズのデータ・セットでの操作を暗黙的にサポートするので、_LARGE_FILES フィーチャー・テスト・マクロの定義は必要ありません。

注: AMODE 64 を使用すると、このフィーチャー・テスト・マクロは不要になります。大規模ファイルは LP64 プログラミング・モデルでは自動的にサポートされ、そのため、AMODE 64 C/C++ アプリケーションに対しては自動的に組み込まれます。c99 コンパイラーは、デフォルトで long long データ型を標準タイプと定義します。
制約事項: このフィーチャー・テスト・マクロは、__LIBASCII フィーチャー・テスト・マクロとは 互換性がありません。
_LARGE_MEM

このフィーチャー・テスト・マクロは、AMODE 64 の値にアクセスする必要がある AMODE 31 アプリケーション用 に提供されています。ラージ・メモリー・サポートを使用するには、LANGLVL(LONGLONG) が必要です。

注: このフィーチャー・テスト・マクロは AMODE 64 では廃止されました。 ラージ・メモリー・サポートは LP64 プログラミング・モデルでは自動であ り、そのため、ラージ・メモリーに関するすべての動作は、AMODE 64 C/C++ ア プリケー ションに対しては自動的に組み込まれます。
_LARGE_TIME_API

このフィーチャー・テスト・マクロは、新しい typedef、構造体、および関数を公開するので、アプリケーションは、9999 年 12 月 31 日の 23:59:59 UTC という人為的な限界まで構成されたカレンダー時間を処理することができます。

__LIBASCII
このフィーチャー・テスト・マクロは、以下の C/C++ 関数に、ASCII に似た環境を提供します。
access(), asctime(), atof(), atoi(), atol(), chdir(), chmod(), 
chown(), creat(), ctime(), dllload(), dllqueryfn(), dynalloc()  
ecvt(), execv(), execve(), execvp(), fcvt(), fdopen(), fopen(),  
freopen(), ftok(), gcvt(), getcwd(), getenv(), getgrnam(),  
gethostbyaddr(), gethostbyname(), gethostname(), getlogin(),  
getopt(), getpass(), getpwnam(), getpwuid(), getservbyname(),  
getwd(), inetaddr(), inet_ntoa(),isalnum(), isalpha(), iscntrl(),  
isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(),  
isupper(), isxdigit(), link(), localeconv(), mbstowcs(), mbtowc(), 
mkdir(), mknod(), mktemp(), nl_langinfo(), open(), opendir(), 
perror(), popen(), ptsname(), putenv(), readdir(), regcomp(),  
remove(), rename(), rexec(), rmdir(), scanf(), setenv(),  setkey(), 
setlocale(), setvbuf(), sprintf(), sscanf(),  stat(), statvfs(), 
strcasecmp(), strerror(), strncasecmp(),  strtod(), strtol(), 
strtoul(), system(), tempnam(), tmpnam(),  toascii(), tolower(), 
toupper(), uname(), unlink(), utime(),  utimes()
これらの関数のうち 1 つ以上を使用しているアプリケーション・プログラムの場合、入出力は ASCII なので、 それぞれのアプリケーションに、以下のフィーチャー・テスト・マクロを追加してください。
  • #define __LIBASCII
  • CONV(ISO8859-1) オプションを使用して再コンパイルすると、 コンパイラーがソース・プログラム内に定義されているすべてのストリングを、EBCDIC 形式ではなく ASCII で生成します。
注:
  • このフィーチャー・テスト・マクロは AMODE 64 ではサポートされません。
  • 拡張 ASCII および __LIBASCII は独立しており、一緒に使用することはできません。拡張 ASCII および __LIBASCII を一緒に使用することはサポートされていません。
  • libascii 関数は、ランタイム・ライブラリーと同様にスレッド・セーフです。ただし、getopt() 関数は例外です。libascii getopt() 関数はスレッド・セーフではありません。second 引数は、EBCDIC から ASCII に変換する際に短くなり、そしてまた EBCDIC に戻ります。 このフィーチャー・テスト・マクロは、_LARGE_FILES フィーチャー・テスト・マクロとは互換性がありません。
_LONGMAP

LONGNAME コンパイラー・オプションを指定してコンパイルされ、POSIX 関数を使用するプログラムは、z/OS UNIX シェル環境の外部でプリリンカーを使用する場合、_LONGMAP を定義する必要があります。

_MSE_PROTOS

_MSE_PROTOS フィーチャー・テスト・マクロは、以下の処理 を実行します。

  1. マルチバイト拡張サポート (MSE) の動作を選択する。 「CAE 仕様 システム・インターフェースおよびヘッダー 第 4 号、1992 年 7 月 (XPG4)」で定義された関数用の動作の代わりに、「ISO/IEC 9899:1990/Amendment 1:1994」で指定された、wchar.h で宣言されたマルチバイト拡張サポート (MSE) 関数の動作を選択する。
  2. wchar.h で宣言された (XPG4 ではなく、ISO/IEC 9899:1990/Amendment 1:1994 で指定された) MSE 関数の宣言を公開する。
注: _ISOC99_SOURCE を定義するか、C99 をサポートするように設計されたコンパイラーを使用すると、_NOISOC99_SOURCE も一緒に定義されていない限り、このネーム・スペースが公開されます。
_NOISOC99_SOURCE

このフィーチャー・テスト・マクロは、C99 規格の一部である新しいインターフェースが公開されないようにします。 新しい C99 インターフェースが公開されないようにするには、最初のヘッダーをインクルードする前に、このフィーチャー・テスト・マクロを定義する必要があります。

注: 最初のヘッダーをインクルードする前に _NOISOC99_SOURCE と _ISOC99_SOURCE の両方を定義した場合、新しい C99 インターフェースは公開されません。
_OE_SOCKETS

このフィーチャー・テスト・マクロは、含まれる関数プロトタイプおよび構造体に 応じて、BSD に類似したソケット・インターフェースを 定義します。 これは、_XOPEN_SOURCE_EXTENDED 1 と共に使用することができ、XPG4.2 ソケット・インターフェース が BSD に類似したインターフェースに置き換えられます。

制約事項: このフィーチャー・テスト・マクロは AMODE 64 ではサポートされません。
_OPEN_DEFAULT

0 と定義し、さらにほかのフィーチャー・テスト・マクロを何も定義しないと、すべてのシンボルが可視になります。_OPEN_DEFAULT のほかに、POSIX および (または) XPG4 フィーチャー・テスト・マクロだけが定義されている場合、要求されたシンボルだけが可視になります。そうでなければ、追加シンボル (LANGLVL(EXTENDED) コンパイラー・オプションが指定されたときの可視シンボルなど) が公開されることがあります。

1 と定義すると、このマクロは基本レベルの z/OS UNIX 機能 (POSIX.1、POSIX.1a、および POSIX.2) を提供します。

_OPEN_MSGQ_EXT

このフィーチャー・テスト・マクロは、メッセージおよびファイル記述子をモニターする ため、select()、selectex()、および poll() を 使用できるようにするインターフェースを定義します。

_OPEN_SOURCE

1 と定義すると、このマクロは MVS 5.1 で使用可能であったすべての機能を定義します。このマクロは、_OPEN_SYS を指定することと同じです。

2 と定義すると、このマクロは、XPG4XPG4.2、およびすべての z/OS UNIX 拡張機能を含む、MVS 5.2.2 で使用可能なすべての機能を定義します。

3 と定義すると、このマクロは _ALL_SOURCE を指定することと同じです。

_OPEN_THREADS がアプリケーションに明示的に定義されていない場合、以下のいずれかが提供される場合を除き、_OPEN_SOURCE は _OPEN_THREADS 1 を定義します。

  • _ALL_SOURCE_NO_THREADS
  • _UNIX03_THREADS
  • _XOPEN_SOURCE 600
_OPEN_SYS

1 と定義すると、このマクロは、POSIX.1POSIX.1aPOSIX.2 で必要とされるシンボルが可視となることを示します。_OPEN_THREADS マクロで定義されたどのシンボルも許可されます。

_OPEN_THREADS がアプリケーションに明示的に定義されていない場合、以下のいずれかが提供される場合を除き、_OPEN_SYS は _OPEN_THREADS 1 を定義します。

  • _ALL_SOURCE_NO_THREADS
  • _UNIX03_THREADS
  • _XOPEN_SOURCE 600

公開された標準のいずれかが、問題のヘッダーにシンボルを表示することを明示的に許可している場合、あるいはシンボルが z/OS UNIX System サービス拡張機能として定義された場合、追加のシンボルを可視にすることができます。

_OPEN_SYS_DIR_EXT

このフィーチャー・テスト・マクロは、_opendir2() と __readdir2() のインターフェースと関数プロトタイプを定義します。

_OPEN_SYS_FILE_EXT

#define を指定して任意の値に定義するときに、_OPEN_SYS_FILE_EXT は、ファイル変換、ファイル・タグ、およびファイル属性の操作機能性で必要とされるシンボルが可視となることを示します。

_OPEN_SYS_IF_EXT

1 と定義すると、このフィーチャー・テスト・マクロは、<net/if.h> and <sys/ioctl.h> 内で検出された、ネットワーク・インターフェース の操作に必要な、BSD に似たソケット定義を公開します。 このフィーチャー・テスト・マクロは、z/OS V1R9 で使用可能になりました。

_OPEN_SYS_IPC_EXTENSIONS

このフィーチャー・テスト・マクロは、X/Open プロセス間通信機能に対して z/OS UNIX 拡張機能を定義します。_OPEN_SYS_IPC_EXTENSIONS を定義すると、POSIX.1、POSIX.1a、および XPG4 のシンボルが可視になります。このマクロは、_XOPEN_SOURCE と共に使用してください。

_OPEN_SYS_MUTEX_EXT

このフィーチャー・テスト・マクロは、pthread 条件変数および mutex を共用メモリーで許可します。このフィーチャーが定義されると、pthread_mutex_t および pthread_cond_t はサ イズが大幅に大きくなります。

_XOPEN_SOURCE 600 または _UNIX03_THREADS のいずれかが定義された場合、ネーム・スペースは _OPEN_SYS_MUTEX_EXT マクロによって可視にされたすべてのエレメントを組み込みます。その場合、_OPEN_SYS_MUTEX_EXT は冗長となり、アプリケーションで定義する必要がありません。

_OPEN_SYS_PTY_EXTENSIONS

このフィーチャー・テスト・マクロは、X/Open 疑似 TTY 機能に対して z/OS UNIX 拡張機能を定義します。_OPEN_SYS_PTY_EXTENSIONS を定義すると、POSIX.1、POSIX.1a、XPG4、および XPG4.2 のシンボルが可視になります。このマクロは、_XOPEN_SOURCE_EXTENDED 1 と共に使用してください。

_OPEN_SYS_SOCK_EXT

このフィーチャー・テスト・マクロは、拡張ソケットおよびバルク・モード・サポート用に関数プロトタイプおよび構造体のインターフェースを定義します。

_OPEN_SYS_SOCK_EXT2

このフィーチャー・テスト・マクロは、accept_and_recv() の関数プロトタイプとインターフェースを定義します。

_OPEN_SYS_SOCK_EXT3

このフィーチャー・テスト・マクロは、マルチキャスト・ソース・フィルター処理の関数プロトタイプとインターフェースを定義します。

_OPEN_SYS_SOCK_EXT4

このフィーチャー・テスト・マクロは、着信した要求と同じインバウンド・インターフェースで UDP 応答パケットの送信に使用されるインターフェースを netinet/in.h で定義します。

_OPEN_SYS_SOCK_IPV6

定義されますと、インターネット・プロトコル (IP) バージョン 6 (IPv6) に関連したシンボルが可視になることを指示します。

_XOPEN_SOURCE を 600 に定義すると、Single UNIX Specification、バージョン 3 に必要な IPv6 シンボルを公開します。ただし、これらのシンボルは _OPEN_SYS_SOCK_IPV6 に関連した完全なネーム・スペースのサブセットのみで構成されます。アプリケーションでは両方のマクロを定義することができますが、そのようなアプリケーションは厳格には Single UNIX Specification、バージョン 3 に準拠していないことになります。

_OPEN_THREADS

1 と定義すると、このマクロは POSIX.1POSIX.1a、および POSIX.4a (ドラフト 6) で必要とされるシンボルが可視となることを示します。

2 と定義すると、1 と定義した場合に可視になるもののほかに、Single UNIX Specification、バージョン 3 から z/OS V1R07 に紹介された追加の pthread 関数が可視になります。_OPEN_THREADS が 2 に定義された場合、以下のシンボルがネーム・スペースに追加されます。

インターフェース 定数
pthread_getconcurrency() PTHREAD_CANCEL_ENABLE
pthread_setconcurrency() PTHREAD_CANCEL_DISABLE
pthread_setcancelstate() PTHREAD_CANCEL_DEFERRED
pthread_setcanceltype() PTHREAD_CANCEL_ASYNCHRONOUS
pthread_sigmask()  
pthread_testcancel()  
pthread_key_delete()  

3 と定義すると、動作と関数シグニチャーがまだ POSIX.4a ドラフト 6 仕様を基本としていますが、Single UNIX Specification、バージョン 3 の Thread オプションに必要なすべての pthread 関数が公開されます。さらに、_OPEN_THREADS 2 で公開されたシンボルに加え、_OPEN_THREAD 3 が以下のシンボルをネーム・スペースに追加します。

インターフェース 定数
pthread_atfork() PTHREAD_CANCEL_CANCELED
pthread_attr_getguardsize() PTHREAD_COND_INITIALIZER
pthread_attr_getschedparam() PTHREAD_CREATE_DETACHED
pthread_attr_getstack() PTHREAD_CREATE_JOINABLE
pthread_attr_getstackaddr() PTHREAD_EXPLICIT_SCHED
pthread_attr_setguardsize()  
pthread_attr_setschedparam()  
pthread_attr_setstack()  
pthread_attr_setstackaddr()  

上記および _OPEN_THREADS 2 または 3 によって公開された Thread インターフェースは、Single UNIX Specification、バージョン 3 に完全に準拠しています。しかし、ライブラリーにある他のスレッド・インターフェースは、新しい動作を示さないか、または新しい標準で変わった関数シグニチャーを使用しません。_UNIX03_THREADS または _XOPEN_SOURCE 600 を定義するアプリケーションは、Single UNIX Specification、バージョン 3 で完全にコンパイルするスレッド・サポートを取得します。

_OPEN_THREADS が _XOPEN_SOURCE 600 と共に定義された場合、_OPEN_THREADS は優先順位を得て、_XOPEN_SOURCE 600 のデフォルトのスレッドの動作をオーバーライドします。しかし、_OPEN_THREADS および _UNIX03_THREADS は互いに排他的です。

注: フィーチャー・テスト・マクロ _OPEN_SYS、_OPEN_SOURCE、および _ALL_SOURCE は、以下のいずれかが提供されている場合を除き、アプリケーションに明示的に _OPEN_THREADS が定義されていない場合、デフォルトとして _OPEN_THREAD 1 を取り込みます。
  • _ALL_SOURCE_NO_THREADS
  • _UNIX03_THREADS
  • _XOPEN_SOURCE 600
_POSIX1_SOURCE
  • 1 と定義すると、このマクロは _POSIX_SOURCE と同じ意味を持ちます。
  • 2 と定義すると、POSIX.1a シンボルと POSIX.1 シンボルの両方が可視となります。明示的に POSIX.1a が問題のヘッダーにシンボルを表示することを許可した場合、追加のシンボルを可視にすることができます。
_POSIX_C_SOURCE
  • 1 と定義すると、このマクロは、POSIX.1 で必要とされるシンボルが可視となることを示します。明示的に POSIX.1 が問題のヘッダーにシンボルを表示することを許可した場合、追加のシンボルを可視にすることができます。
  • 2 と定義すると、POSIX.1 および POSIX.2 の 両方のシンボルが可視となります。
  • 200112L と定義すると、POSIX.1 および POSIX.2 を含め、Single UNIX Specification、バージョン 3 シンボルは可視となります。バージョン 3 は ISO C 標準 (ISO/IEC 9899:1999) に合わせているため、このフィーチャー・テスト・マクロの定義は C99 ネーム・スペースも公開します。
  • _POSIX_C_SOURCE 200112L 定義は、z/OS V1R9 以降使用可能です。それより以前のリリースでの使用は、コンパイル時にエラーとなります。
  • 明示的に POSIX.2 が問題のヘッダーにシンボルを表示することを許可した場合、追加のシンボルを可視にすることができます。
_POSIX_SOURCE

#define を指定して任意の値に定義するときに、このマクロは POSIX.1 で必要とされるシンボルが可視となることを示します。明示的に POSIX.1 が問題のヘッダーにシンボルを表示することを許可した場合、追加のシンボルを可視にすることができます。

_SHARE_EXT_VARS

このフィーチャー・テスト・マクロは、DLL などの動的にロードされるモジュールから、アプリケーションの POSIX および XPG4 外部変数にアクセスできるようにします。スレッド固有の値にアクセスする機能があるこれらの外部変数の場合、このマクロによって外部変数のスレッド固有の値にアクセスできるようになり、その際明示的に関数を呼び出す必要はありません。

接頭部 _SHR_ が付いたフィーチャー・テスト・マクロおよび次に示すフィーチャー・テスト・マクロを使用して、個々の変数を外部化することができます。 _SHARE_EXT_VARS を定義して、そのセット全体にアクセスできます。

注: アプリケーションを XPLINK または LP64 オプションでコンパイルした場合、以下のようになります。
  • POSIX および XPG4 の外部変数は、SCEELIB データ・セットの C ランタイム・ライブラリーのサイド・デックによって解決され、動的にロードされる全モジュールからアクセス可能になります。詳しくは、「z/OS XL C/C++ プログラミング・ガイド」を参照してください。
  • _SHARE_EXT_VARS フィーチャー・テスト・マクロ、および _SHR_ 接頭部の付いた以下のフィーチャー・テスト・マクロは、スレッド固有の値にアクセスする場合のみ必要です。その際、明示的に関数を呼び出す必要はありません。
_SHR_DAYLIGHT

動的にロードされる モジュール (DLL など) から daylight 外部変数へのアクセスを共用する場合は、_SHR_DAYLIGHT フィーチャー・テスト・マクロを定義して、プログラム ・ソースに time.h を設定してください。

_SHR_ENVIRON

プログラムで char **environ が宣言されており、動的にロードされる モジュール (DLL など) から環境変数配列にアクセスする場合は、_SHR_ENVIRON フィーチャー・テスト・マクロを定義して、プログラム ・ソースに stdlib.h を設定してください。

_SHR_H_ERRNO

動的にロードされるモジュール (DLL など) から h_errno 外部変数へのアクセスを共用する場合は、_SHR_H_ERRNO フィーチャー・テスト・マクロを定義して、プログラム・ソースに netdb.h をインクルードしてください。

_SHR__LOC1

動的にロードされる モジュール (DLL など) から __loc1 外部変数へのアクセスを共用する場合は、_SHR_LOC1 フィーチャー・テスト・マクロを定義して、プログラム ・ソースに libgen.h を設定してください。

_SHR_LOC1

動的にロードされる モジュール (DLL など) から loc1 外部変数へのアクセスを共用する場合は、_SHR_LOC1 フィーチャー・テスト・マクロを定義して、プログラム ・ソースに regexp.h を設定してください。

_SHR_LOC2

動的にロードされる モジュール (DLL など) から loc2 外部変数へのアクセスを共用する場合は、_SHR_LOC2 フィーチャー・テスト・マクロを定義して、プログラム ・ソースに regexp.h を設定してください。

_SHR_LOCS

動的にロードされる モジュール (DLL など) から locs 外部変数へのアクセスを共用する場合は、_SHR_LOCS フィーチャー・テスト・マクロを定義して、プログラム ・ソースに regexp.h を設定してください。

_SHR_OPTARG

動的にロードされる モジュール (DLL など) から optarg 外部変数へのアクセスを共用する場合は、_SHR_OPTARG フィーチャー・テスト・マクロを定義して、プログラム ・ソースに unistd.h または stdio.h を設定してください。

_SHR_OPTERR

動的にロードされる モジュール (DLL など) から opterr 外部変数へのアクセスを共用する場合は、_SHR_OPTERR フィーチャー・テスト・マクロを定義して、プログラム ・ソースに unistd.h または stdio.h を設定してください。

_SHR_OPTIND

動的にロードされる モジュール (DLL など) から optind 外部変数へのアクセスを共用する場合は、_SHR_OPTIND フィーチャー・テスト・マクロを定義して、プログラム ・ソースに unistd.h または stdio.h を設定してください。

_SHR_OPTOPT

動的にロードされる モジュール (DLL など) から optopt 外部変数へのアクセスを共用する場合は、_SHR_OPTOPT フィーチャー・テスト・マクロを定義して、プログラム ・ソースに unistd.h または stdio.h を設定してください。

_SHR_SIGNGAM

動的にロードされる モジュール (DLL など) から signgam 外部変数へのアクセスを共用する場合は、_SHR_SIGNGAM フィーチャー・テスト・マクロを定義して、プログラム ・ソースに math.h を設定してください。

_SHR_T_ERRNO

動的にロードされるモジュール (DLL など) から t_errno 外部変数へ のアクセスを共用する場合は、_SHR_T_ERRNO フィーチャー・テスト・ マクロを定義して、プログラム・ソースに xti.h を設定してください。

_SHR_TIMEZONE

動的にロードされるモジュール (DLL など) から timezone 外部変数へのアクセスを共用する場合は、_SHR_TIMEZONE フィーチャー・テスト・マクロを定義して、プログラム・ソースに time.h を設定してください。_SHR_TIMEZONE を定義する際のネーム・スペース違反を防ぐために、timezone 変数は、_timezone として参照されるようにする必要があります。

_SHR_TZNAME

動的にロードされたモジュール (DLL など) から tzname 外部変数へのアクセスを共用する場合は、_SHR_TZNAME フィーチャー・テスト・マクロを定義して、プログラム ・ソースに time.h を設定してください。

__STDC_CONSTANT_MACROS

このフィーチャー・テスト・マクロは、<stdint.h> に文書化されている整数定数用マクロを公開する C++ アプリケーションに必要です。

__STDC_FORMAT_MACROS

このフィーチャー・テスト・マクロは、<inttypes.h> に文書化されている形式指定子用マクロを公開する C++ アプリケーションに必要です。

__STDC_WANT_DEC_FP__

この MACRO は C99 DFP 仕様に追加されます (C および C++ 用)。ユーザーは DFP サポートが必要な時にこの MACRO を定義します。これは、__IBM_DFP が定義されている場合、<math.h> のすべての DFP 指向定義およびその他のヘッダーが公開される原因となります。

__STDC_LIMIT_MACROS

このフィーチャー・テスト・マクロは、指定幅の整数型の限界、および <stdint.h> に文書化されているその他の整数型の限界を公開する C++ アプリケーションに必要です。

_TR1_C99

このフィーチャー・テスト・マクロは、「ISO/IEC DTR 19768: Draft Technical Report on C++ Library Extensions」の Chapter 8 で説明されている C++ TR1 C99 ネーム・スペースを公開します。

_TR1_C99 と _AIX_COMPATIBILITY の両方のフィーチャー・テスト・マクロが定義される場合、_AIX_COMPATIBILITY が優先されます。これは、copysign()、scalbn()、および浮動小数点種別関数に影響を与えます。

_TR1_C99 と _FP_MODE_VARIABLE の両方のフィーチャー・テスト・マクロが定義される場合、以下の関数に対して float 多重定義はサポートされません。

atan2()、 copysign()、fdim()、fma()、fmax()、fmin()、fmod()、frexp()、hypot()、 ldexp()、modf()、nextafter()、nexttoward()、pow()、remainder()、remquo()、 scalbln()、および scalbn()

また、_TR1_C99 と _FP_MODE_VARIABLE の両方のフィーチャー・テスト・マクロが設定される場合は、frexp() および ldexp() に対して long double 多重定義はサポートされません。

このフィーチャー・マクロ・テストには、z/OS V1.10 以降の z/OS XL C++ コンパイラーの使用が必要です。

_UNIX03_SOURCE

このフィーチャー・テスト・マクロは、新しい Single UNIX Specification、バージョン 3 インターフェースを公開します。既存の API の動作は変更せず、また _XOPEN_SOURCE_EXTENDED などのフィーチャー・テスト・マクロによって制御されるインターフェースは公開しません。 _UNIX03_SOURCE によって公開される関数と動作は、Single UNIX Specification、バージョン 3 のサブセットであり、完全なインプリメンテーションではありません。C/C++ ランタイムで使用可能な完全な Single UNIX Specification、バージョン 3 実装環境を公開するためには、_XOPEN_SOURCE または _POSIX_C_SOURCE を参照してください。

リリース _UNIX03_SOURCE で公開されるインターフェース
z/OS V1R6 dlclose()、dlerror()、dlopen()、dlsym()
z/OS V1R7 sched_yield()、strerror_r()、unsetenv()
z/OS V1R8 flockfile()、 ftrylockfile()、 funlockfile()、 getc_unlocked()、 getchar_unlocked()、 putc_unlocked()、 putchar_unlocked()
z/OS V1R9 posix_openpt()、pselect()、sockatmark()
注: このフィーチャー・テスト・マクロは、新しい pthread インターフェースを公開しません。pthread インターフェースを公開するためには、_OPEN_THREADS および _UNIX03_THREADS を参照してください。
_UNIX03_THREADS

このフィーチャー・テストは、すべての pthread 関数、関数シグニチャー、および Single UNIX Specification、バージョン 3 の Thread オプションに必要な動作を公開します。マクロは z/OS V1R9 以降をターゲットとしてコンパイルできます。

_UNIX03_THREADS を定義すると、_OPEN_SYS_MUTEX_EXT が冗長で _UNIX03_THREADS と共に定義する必要がないようにするために、そのフィーチャー・テスト・マクロ _OPEN_SYS_MUTEX_EXT でカバーされる内容を公開します。

_XOPEN_SOURCE が 600 に定義されている場合は、このフィーチャー・テスト・マクロは定義する必要はありません。_OPEN_THREADS が定義されていない限り、_XOPEN_SOURCE 600 は _UNIX03_THREADS と同じインターフェースおよび動作を使用可能にします。

_UNIX03_THREADS および _OPEN_THREADS は、互いの排他的です。

_UNIX03_WITHDRAWN

このフィーチャー・テスト・マクロを定義すると、以前にレガシー・フィーチャー・グループにあったかまたは obsolescent とマークされて、Single UNIX Specification、バージョン 3 から除去された、言語エレメントを公開します。そうでなければ、これらのエレメントは、_XOPEN_SOURCE 600 または POSIX_C_SOURCE 200112L でコンパイルすることによって公開されたネーム・スペースで可視にはなりません。

_UNIX03_WITHDRAWN が定義されると、以下の活動を終了したシンボルが公開されます。

関数 定数
brk() CLOCK_TICKS
chroot() IUCLC
cuserid() L_cuserid
gamma() NOSTR
getdtablesize() OLCUC
getpagesize() PASS_MAX
getpass() _SC_2_ C_VERSION
getw() _SC_PASS_MAX
putw() _SC_XOPEN_XCU_VERSION
regcmp() TMP_MAX
regex() XCASE
sbrk() YESSTR
sigstack()  
ttyslot()  
valloc() 外部変数
wait3() __loc1
_VARARG_EXT_

このフィーチャー・テスト・マクロは、va_arg、va_end、および va_start マクロのユーザー が、va_list 型を別に定義できるようにします。

_XOPEN_SOURCE

このフィーチャー・テスト・マクロは、XPG4 標準 (1992 年 7 月) で定義されている機能を定義します。

500 と定義すると、このフィーチャー・テスト・マクロは、Single UNIX Specification、バージョン 2 に関連した特 定のキー機能を利用できるようにします。

600 と定義すると、このフィーチャー・テスト・マクロは、X/Open System Interface (XSI) 拡張に関連付けされたネーム・スペースおよび以下のオプションおよびオプション・グループと同様に、_POSIX_C_SOURCE 200112L によって定義されたネーム・スペースを含む Single UNIX Specification、バージョン 3 の完全な実装環境を公開します。

  • ファイル同期
  • メモリー・マップ・ファイル
  • メモリー保護
  • リアルタイム・シグナル拡張
  • スレッド・スタック・アドレス属性
  • スレッド・スタック・サイズ属性
  • スレッド・プロセス共用同期
  • スレッド・セーフ関数
  • スレッド
  • 暗号化オプション・グループ
  • レガシー・オプション・グループ
  • XSI ストリーム・オプション・グループ

_XOPEN_SOURCE 600 を使用すると、いくつかの他のフィーチャー・テスト・マクロによってカバーされるネーム・スペースを公開し、それらのマクロをそれなりに冗長にします。以下は、_XOPEN_SOURCE 600 が定義された時に定義する必要のないものです。

_OPEN_THREADS が _XOPEN_SOURCE 600 と共に定義された場合、_OPEN_THREADS は優先順位を得て、Single UNIX Specification、バージョン 3 スレッドの動作をオーバーライドします。_OPEN_THREADS が影響している時はいつでも、アプリケーションが明示的にこのマクロを定義しない限り、_OPEN_SYS_MUTEX_EXT 拡張も除去されます。

_XOPEN_SOURCE 600 定義は、z/OS V1R9 以降使用可能です。それより以前のリリースでの使用は、コンパイル時にエラーとなります。

Single UNIX Specification、バージョン 3 の完全サポートには、C99 準拠コンパイラーを使用する必要があります。ほとんどのネーム・スペースは古いコンパイラーで使用可能ですが、バージョン 3 のいくつかのエレメント (<complex.h> や <tgmath.h> など) は可視になりません。

_XOPEN_SOURCE_EXTENDED

1 と定義すると、このマクロは、XPG4 標準と「UNIX ベースのオペレーティング・システムの共通 API」(1994 年 4 月 ドラフト版) のセットで定義された機能を定義します。