C 形式モードでは、rpcgen への void 引数の渡し方が異なります。値が void の場合、引数が渡される必要はありません。
C には組み込み型のブール型はありません。ただし、RPC ライブラリは、TRUE または FALSE のうちいずれかの bool_t
と呼ばれるブール値を使用します。XDR 言語で型 bool
として宣言されたパラメータは、コンパイルされると、出力ヘッダーファイルで bool_t
になります。
次に例を示します。
bool married; --> bool_t married;
C 言語は組み込み型の文字列型ではありませんが、代わりに null で終了する char *
規則を使用します。C では、文字列は通常 null で終了する単一配列であるとみなされます。
XDR 言語では、string キーワードを使用して文字列が宣言されて、出力ヘッダーファイルで char *
型にコンパイルされます。山括弧でくくられた最大サイズは、文字列で使用できる最大文字数を指定します。NULL 文字をカウントしません。最大サイズは省略できます。この場合、文字列は任意の長さとなります。
次に例を示します。
string name<32>; --> char *name; string longname<>; --> char *longname;
NULL 文字列は渡されません。ただし、0 長の文字列 (つまりターミネータだけ、または NULL バイト) は渡されます。
隠されたデータは、未入力のデータ、つまり任意のバイトのシーケンスを記述するために、XDR で使用されます。隠されたデータは固定長配列または可変長配列として宣言できます。
opaque diskblock[512]; --> char diskblock[512]; opaque filedata<1024>; --> struct { u_int filedata_len; char *filedata_val; } filedata;
void 宣言では、変数を指定できません。void 宣言には、void 以外何も記述しません。 void 宣言は次の 2 箇所でのみ行います。 リモートプロシージャの引数または戻り値として、共用体の定義とプログラムの定義 (引数が渡されないなどで使用される) です。たとえば、引数は渡されません。