[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.5 関数呼び出しの構築

以下に示す組み込み関数を使うと、関数が受け取った引数を記録することが できたり、また、引数の数や型を知らなくても、同じ引数を 別の関数に渡すことができる。

また、関数呼び出しの戻り値を記録し、後でその値を返すこともできる。 これは、その関数が返そうとしているデータ型を知らなくても可能である。 (ただし、呼び出し側の関数がそのデータ型が返ってくることを想定している 場合に限られるが。)

__builtin_apply_args ()

この組み込み関数は、現在の関数に渡されたのと同じ引数を付けての 呼び出しをどのように行なうかを記述するデータへの void * 型の ポインタを返す。

この関数は引数ポインタレジスタ、構造体値アドレス、関数へ引数を 渡すのに使われる可能性のある全てのレジスタを、スタック上に割り当てられた メモリブロックにセーブする。 次に、そのブロックのアドレスを返す。

__builtin_apply (function, arguments, size)

この組み込み関数は、function(void (*)() 型)を、 arguments (void * 型) と size (int 型) で 記述される仮引数のコピーを引数として呼び出す。

arguments の値は、__builtin_apply_args が返す値と すべきである。引数 size は、スタックの引数データの大きさを バイト単位で指定する。

この関数は、function が返す値をどのように返すかを 記述するデータへの、void * 型のポインタを返す。 このデータは、スタック上に割り当てられたメモリブロック中に セーブされる。

size の適切な値を計算するのはいつでも簡単というわけではない。 この値は __buitin_apply によって、 スタック上にプッシュされ、入力引数領域からコピーされるデータ量を 計算するのに使われる。

__builtin_return (result)

この組み込み関数は、それを含む関数から result で記述される 値を返す。 result には、__builtin_apply が返す値を指定すべきである。


This document was generated using texi2html 1.78.