日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
1.3.2 関数プロトタイプの構文規則 |
ライブラリに登録されている関数が使用するパラメータの数は同じではないため,関数プロトタイプの構文の記述は次の規則に従っています。
printfの構文記述について考えてみましょう。
#include <stdio.h> int printf(const char *format_specification, ...); |
printfの構文記述には, 1 つ以上の省略可能なパラメータを指定できることが示されています。
printfのパラメータに関する残りの情報は,関数の説明に示されています。
1.3.3 UNIX 形式のファイル指定
HP C RTL の関数やマクロでは,ファイルを操作することがよくあります。移植性に関する重大な問題の 1 つとして,各システムで使用されるファイル指定が異なるという問題があります。多くの C アプリケーションは UNIX システムとの間で移植されるため,すべてのコンパイラが UNIX システム・ファイル指定を読み込み,解釈できると便利です。
C プログラムを UNIX システムから OpenVMS システムに移植するのに役立つように,次のファイル指定変換関数が HP C RTL に用意されています。
これらのファイル指定変換関数を HP C RTL に取り込むと, UNIX システム・ファイル指定を含む C プログラムを書き直す必要がなくなるという利点があります。 HP C は大部分の有効な UNIX システム・ファイル指定を OpenVMS ファイル指定に変換できます。
UNIX システムと OpenVMS システムのファイル指定の違いだけでなく, RTL がファイルにアクセスする方法の違いについても注意してください。たとえば,RTL は有効な OpenVMS ファイル指定と有効な大部分の UNIX ファイル指定をそれぞれ受け付けますが,この 2 つの組み合わせを受け付けることはできません。 表 1-1 は, UNIX システムと OpenVMS システムのファイル指定の区切り文字の違いを示しています。
説明 | OpenVMS システム | UNIX システム |
---|---|---|
ノード区切り文字 | :: | !/ |
デバイス区切り文字 | : | / |
ディレクトリ・パス区切り文字 | [ ] | / |
サブディレクトリ区切り文字 | [ . ] | / |
ファイル拡張区切り文字 | . | . |
ファイル・バージョン区切り文字 | ; | 適用されない |
たとえば, 表 1-2 は, 2 つの有効な指定と 1 つの無効な指定の形式を示しています。
システム | ファイル指定 | 有効/無効 |
---|---|---|
OpenVMS | BEATLE::DBA0:[MCCARTNEY]SONGS.LIS | 有効 |
UNIX | beatle!/usr1/mccartney/songs.lis | 有効 |
--- | BEATLE::DBA0:[MCCARTNEY.C]/songs.lis | 無効 |
HP C がファイル指定を変換する場合, OpenVMS システムと UNIX システムの両方のファイル指定を検索します。したがって, HP C が UNIX システムのファイル指定を変換する方法と, UNIX システムが同じ UNIX ファイル指定を変換する方法には違いがあることがあります。
たとえば, 表 1-2 に示すように 2 種類のファイル指定の方法を組み合わせた場合, HP C RTL は [MCCARTNEY.C]/songs.lis を [MCCARTNEY]songs.lis または [C]songs.lis として解釈する可能性があります。したがって, HP C が複合ファイル指定を検出すると,エラーが発生します。
UNIX システムでは,デバイス名,ディレクトリ名,ファイル名に対して同じ区切り文字を使用します。このように UNIX ファイル指定にはあいまいさがあるため, HP C はユーザの期待どおりに有効な UNIX システムのファイル指定を変換できないことがあります。
たとえば, /bin/todayを OpenVMS システムの形式で表現すると, [BIN]TODAY または [BIN.TODAY] になります。 HP C は存在するファイルからだけ正しい解釈を行うことができます。ファイル指定で 1 つのファイルまたはディレクトリに対して UNIX システムのファイル名構文が使用されている場合,次の条件のいずれかが満たされれば,対応する OpenVMS のファイル名に変換されます。
注意 OpenVMS Version 7.3 以降,HP C RTL に対して, UNIX 形式のファイル指定の先頭の部分をサブディレクトリ名またはデバイス名として解釈することを要求できるようになりました。 以前のリリースと同様に, foo/bar(UNIX 形式の名前) のデフォルト変換は FOO:BAR (OpenVMS 形式のデバイス名) です。 foo/bar(UNIX 形式の名前) を [.FOO]BAR (OpenVMS 形式のサブディレクトリ名) に変換するように要求するには,論理名 DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION に ENABLE を定義します。 DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION はファイルごとにチェックされるのではなく,イメージを起動するときに 1 回だけチェックされます。この論理名の定義は, decc$to_vms関数に影響するだけでなく, UNIX 形式と OpenVMS 形式の両方のファイル名を引数として受け付けるすべての HP C RTL 関数に影響します。 |
UNIX システム環境では,数値のファイル記述子を使用してファイルを参照します。ファイル記述子の中には,標準 I/O デバイスを参照するものと,実際のファイルを参照するものがあります。ファイル記述子がオープンされていないファイルに属す場合は, HP C RTL はそのファイルをオープンします。 HP C は次の OpenVMS 論理名を使用してファイル記述子を評価します。
ファイル記述子 | OpenVMS の論理名 | 意味 |
---|---|---|
0 | SYS$INPUT | 標準入力 |
1 | SYS$OUTPUT | 標準出力 |
2 | SYS$ERROR | 標準エラー |
ODS-5 ボリューム構造では,UNIX 形式と OpenVMS 形式が混在したファイル名のサポート機能が拡張されました。長いファイル名がサポートされるようになり,ファイル名でこれまでより広範囲にわたる文字を使用できるようになり,ファイル名で大文字と小文字の区別が保持されるようになりました。 OpenVMS Alpha Version 7.3-1 では, C RTL は ODS-5 文字のサポートを大幅に向上しており,これまでは 214 文字しかサポートされなかったのに対し, 256 文字中,250 文字をサポートするようになりました。また,ファイル・タイプのないファイル名にもアクセスできるようになりました。
新しいサポートを有効にするには, 1 つ以上の C RTL 機能論理名を定義する必要があります。これらの名前は次のとおりです。
DECC$EFS_CHARSET
DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION
DECC$FILENAME_UNIX_NO_VERSION
DECC$FILENAME_UNIX_REPORT
DECC$READDIR_DROPDOTNOTYPE
DECC$RENAME_NO_INHERIT
これらの機能論理名や他の機能論理名の詳細については, 第 1.5 節 を参照してください。
1.3.5 シンボリック・リンクと POSIX パス名
OpenVMS では, Open Group 準拠のシンボリック・リンクと, POSIX パス名の処理をサポートしています。詳細は, 第 12 章 を参照してください。
1.4 ヘッダ・ファイル制御のための機能テスト・マクロ
機能テスト・マクロは,移植可能なプログラムを作成するための手段を提供します。これらのマクロを使用すると,プログラムで使用する HP C RTL シンボル名が実装で提供されるシンボル名と競合しないかどうか確認できます。
HP C RTL のヘッダ・ファイルは,多くの機能テスト・マクロの使用をサポートするようにコーディングされています。アプリケーションで機能テスト・マクロを定義した場合, HP C RTL ヘッダ・ファイルはその機能テスト・マクロで定義されているシンボルとプロトタイプだけを提供し,それ以外のものは提供しません。プログラムでこのようなマクロを定義しないと, HP C RTL ヘッダ・ファイルは無制限にシンボルを定義します。
HP C RTL でサポートされる機能テスト・マクロは,次に示すようにヘッダ・ファイル内のシンボルの有効性を制御するために,大きく次のように分類されます。
HP C RTL では,次の標準の一部が実装されています。
機能テスト・マクロを定義することにより,各標準を選択することができます。このようにマクロを定義するには,ヘッダ・ファイルを取り込む前に, C ソースで
#defineプリプロセッサ・ディレクティブを使用するか, CC コマンド・ラインに /DEFINE 修飾子を指定します。
表 1-3 は,標準のサポートを制御する HP C RTL 機能テスト・マクロを示しています。 1.4.2 標準の選択
マクロ名 | 選択される標準 | 暗黙に選択される他の標準 | 説明 |
---|---|---|---|
_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 拡張機能であると解釈され,標準関連の機能テスト・マクロを定義しないことによって選択されます。
目次 | 索引 |
|