HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
OpenVMS では, Open Group 準拠のシンボリック・リンクと, POSIX パス名の処理をサポートしています。詳細は, 第 12 章 を参照してください。
1.5 ヘッダ・ファイル制御のための機能テスト・マクロ
機能テスト・マクロは,移植可能なプログラムを作成するための手段を提供します。これらのマクロを使用すると,プログラムで使用する HP C RTL シンボル名が実装で提供されるシンボル名と競合しないかどうか確認できます。
HP C RTL のヘッダ・ファイルは,多くの機能テスト・マクロの使用をサポートするようにコーディングされています。アプリケーションで機能テスト・マクロを定義した場合, HP C RTL ヘッダ・ファイルはその機能テスト・マクロで定義されているシンボルとプロトタイプだけを提供し,それ以外のものは提供しません。プログラムでこのようなマクロを定義しないと, HP C RTL ヘッダ・ファイルは無制限にシンボルを定義します。
HP C RTL でサポートされる機能テスト・マクロは,次に示すようにヘッダ・ファイル内のシンボルの有効性を制御するために,大きく次のように分類されます。
HP C RTL では,次の標準の一部が実装されています。
機能テスト・マクロを定義することにより,各標準を選択することができます。このようにマクロを定義するには,ヘッダ・ファイルを取り込む前に, C ソースで #defineプリプロセッサ・ディレクティブを使用するか, CC コマンド・ラインに /DEFINE 修飾子を指定します。
表 1-4 は,標準のサポートを制御する HP C RTL 機能テスト・マクロを示しています。
| マクロ名 | 選択される標準 | 暗黙に選択される他の標準 | 説明 |
|---|---|---|---|
| _XOPEN_SOURCE_EXTENDED | XPG4 V2 | XPG4,ISO POSIX-2,ISO POSIX-1,ANSI C | 以前は X/Open で採用されていなかった従来の UNIX ベースのインタフェースも含めて, XPG4 拡張機能が有効になる。 |
| _XOPEN_SOURCE | XPG4 (X/Open Issue 4) | ISO POSIX-2, ISO POSIX-1,ANSI C | XPG4 標準シンボルが有効になり, _POSIX_C_SOURCE が 2 より大きい値に定義されていない場合は, 2 に設定される 1 2。 |
| _XOPEN_SOURCE=500 | X/Open Issue 5 | ISO POSIX-2,ISO POSIX-1,ANSI C | X/Open Issue 5 標準シンボルが有効になり, _POSIX_C_SOURCE が 2 より大きい値に定義されていない場合は, 2 に設定される 1 2。 |
| _XOPEN_SOURCE=600 | X/Open Issue 6 | ISO POSIX-2,ISO POSIX-1,ANSI C | X/Open Issue 6 標準シンボルが有効になり, _POSIX_C_SOURCE が 2 より大きい値に定義されていない場合は, 2 に設定される 1 2。 |
| _POSIX_C_SOURCE==199506 | IEEE 1003.1c-1995 | ISO POSIX-2,ISO POSIX-1,ANSI C | ANSI C によって定義されるヘッダ・ファイルで, IEEE 1003.1c-1995 によって要求されるシンボルが有効になる。 |
| _POSIX_C_SOURCE==2 | ISO POSIX-2 | ISO POSIX-1,ANSI C | ANSI C によって定義されるヘッダ・ファイルで, ISO POSIX-2 によって要求されるシンボルの他に, ISO POSIX-1 によって要求されるシンボルも有効になる。 |
| _POSIX_C_SOURCE==1 | ISO POSIX-1 | ANSI C | ANSI C によって定義されるヘッダ・ファイルで, ISO POSIX-1 によって要求されるシンボルが有効になる。 |
| __STDC_VERSION__==199409 | ISO C amdt 1 | ANSI C | ISO C Amendment 1 シンボルが有効になる。 |
| _ANSI_C_SOURCE | ANSI C | --- | ANSI C 標準のシンボルが有効になる。 |
ここに示した標準のいずれでも定義されていない機能は HP C 拡張機能であると解釈され,標準関連の機能テスト・マクロを定義しないことによって選択されます。
ヘッダ・ファイル定義を制御するために機能テスト・マクロを明示的に定義しなかった場合は, HP C 拡張機能も含めて,定義されているすべてのシンボルが暗黙に取り込まれます。
1.5.3 /STANDARD 修飾子との相互関係
/STANDARD 修飾子はサポートされる C 言語の方言を選択します。
/STANDARD=ANSI89 および /STANDARD=ISOC94 を除き, C 言語の方言の選択と使用する HP C RTL API の選択はそれぞれ独立して行われます。 /STANDARD に対して他の値を選択すると,拡張機能も含めて API 全体が使用可能になります。
/STANDARD=ANSI89 を指定すると,デフォルト API セットは ANSI C セットに制限されます。この場合,より広範囲にわたる API セットを選択するには,適切な機能テスト・マクロも指定する必要があります。拡張機能も含めて, ANSI C の方言とすべての API を選択するには,ヘッダ・ファイルを取り込む前に, __HIDE_FORBIDDEN_NAMES の定義を取り消します。
/STANDARD=ISOC94 を使用してコンパイルすると, __STDC_VERSION__ は 199409 に設定されます。 XPG4 と ISO C Amendment 1 の両方を指定してコンパイルしたときに競合が発生した場合は, ISO C Amendment 1 が優先されます。 ISO C Amendment 1 に対する XPG4 拡張機能を選択するには, _XOPEN_SOURCE を定義します。
次の例はこれらの規則を理解するのに役立ちます。
同様に,
<wchar.h>内の関数
wcsftimeと
wcstokの定義は,ISO C Amendment 1 と XPG4 で少し異なります。
この例では,標準を選択する機能テスト・マクロを指定せずにコンパイルすると,
wcsftimeと
wcstokに対して WCHAR_MAXおよび ISO C Amendment 1 プロトタイプが有効になります。
厳密な ISO C Amendment 1 モードでコンパイルしても,これらは有効になりません。
デフォルト設定では,ヘッダ・ファイルは,コンパイルが行われるオペレーティング・システムのバージョンによって提供される HP C RTL 内の API を有効にします。この処理は,『HP C User's Guide for OpenVMS Systems』に説明しているように, __VMS_VER マクロの定義済み設定によって行われます。たとえば,OpenVMS Version 6.2 でコンパイルすると, V6.2 およびそれより前のバージョンの HP C RTL API だけが使用可能になります。
__VMS_VER マクロの別の使用例として, OpenVMS Alpha Version 7.0 以降で提供される HP C RTL 関数の 64 ビット・バージョンのサポートがあります。すべてのヘッダ・ファイルで,64 ビットをサポートする関数は, __VMS_VER が OpenVMS Version 7.0 以降であることを示す場合にだけ有効になるように条件化されています。
オペレーティング・システムの以前のバージョンを対象にするには,次の操作を行います。
オペレーティング・システムの新しいバージョンを対象にする操作は,常に可能なわけではありません。一部のバージョンでは,まだ存在しないオペレーティング・システムの新機能が新しい DECC$SHR.EXE で要求されることがあります。このようなバージョンでは,ステップ 1 で論理名 DECC$SHR を定義すると,コンパイル・エラーになります。
__VMS_VER の値を上書きするには,コンパイラのコマンド・ラインで __VMS_VER_OVERRIDE を定義します。値を指定せずに __VMS_VER_OVERRIDE を定義すると, __VMS_VER は最大値に設定されます。
1.5.5 互換性モード
次の定義済みマクロは,DEC C の以前のバージョンまたは OpenVMS オペレーティング・システムの以前のバージョンとのヘッダ・ファイルの互換性を選択するために使用します。
ヘッダ・ファイルでは,次の 2 種類の非互換性を制御できます。
次の例はこれらのマクロの使い方を理解するのに役立ちます。
dev_t off_t gid_t pid_t ino_t size_t mode_t ssize_t nlink_t uid_t |
DEC C Version 5.2 より前のバージョンを使用する古い開発環境では,
<types.h>にこれらの
typedefがないため,別のモジュールにこれらの定義を追加する必要があるかもしれません。このような場合は,DEC C Version 5.2 で提供される
<types.h>を使用してコンパイルすると,コンパイル・エラーが発生する可能性があります。
現在の環境を維持し, DEC C Version 5.2 の
<types.h>を取り込むには, _DECC_V4_SOURCE を定義してコンパイルします。このようにすると, DEC C Version 5.2 のヘッダから互換性のない参照が排除されます。たとえば,
<types.h>では,前に示した
typedefsは有効になりません。
| 前へ | 次へ | 目次 | 索引 |