RPC 言語規則には、いくつかの例外があります。
新しい機能の節で、rpcgen の C 形式モードの機能について説明しました。これらの機能は、void
引数に関連しています。引数の値が void
である場合は、引数は渡される必要はありません。
C には組み込みのブール型はありません。しかし、RPC ライブラリは、TRUE または FALSE の、bool_t
と呼ばれるブール型を使用します。XDR 言語でブール型として宣言されたパラメータは、出力ヘッダーファイルの 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 つの部分で行うことができます (たとえば、引数を渡さない遠隔手続きの引き数または結果として)。