STDARG

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

stdarg - 変数引数リスト  

索引

書式

In stdarg.h Ft void Fn va_start va_list ap last Ft type Fn va_arg va_list ap type Ft void Fn va_end va_list ap  

索引

解説

関数はさまざまな型のさまざまな数の引数で呼び出せます。 インクルードファイル Aq Pa stdarg.h は、型 (va_list ) を宣言し、呼び出される関数には数字と型が 未知の引数リストをステップするために 3 つのマクロを定義します。

呼び出される関数は、 va_list 型のオブジェクトを宣言する必要があります。 これは、マクロ Fn va_start , Fn va_arg , Fn va_end によって使用されます。

Fn va_start マクロは、 Fn va_arg と Fn va_end が後に使用する Fa ap を初期化し、 最初に呼び出す必要があります。

パラメータ Fa last は変数引数リストの前の最後のパラメータの名前です。 すなわち、呼び出し関数が型を認識している最後のパラメータです。

このパラメータのアドレスは Fn va_start マクロで使用されるので、 レジスタ変数または関数または配列型として宣言してはなりません。

Fn va_start マクロは値を返しません。

Fn va_arg マクロは、呼び出しの次の引数の型と値がある式に展開されます。 パラメータ Fa ap は、 Fn va_start によって初期化される va_list Fa ap です。 Fn va_arg の呼び出しごとに Fa ap は修正され、次の呼び出しが次の引数を返します。 パラメータ Fa type は、指定型のオブジェクトを指すポインタの型が * を Fa type に追加するだけで得られるように指定された型名です。

次の引数がない場合、または Fa type が (デフォルトの引数生成に従って生成されたような) 実際の次の引数の型と互換性がない場合、 ランダムなエラーが発生します。

Fn va_start マクロの後の最初の Fn va_arg マクロの使用によって、 Fa last の後の引数が返されます。 連続的な呼び出しによって、残りの引数の値が返されます。

Fn va_end マクロは、変数引数リストが Fn va_start によって初期化される関数の正常な 戻りを取り扱います。

Fn va_end マクロは値を返しません。  

索引

使用例

関数 foo は、形式キャラクタのストリングを取り上げ、型を基礎にして各形式 キャラクタに対応する引数を印刷します。
void foo(char *fmt, ...)
{
        va_list ap;
        int d;
        char c, *s;

        va_start(ap, fmt);
        while (*fmt)
                switch(*fmt++) {
                case 's':                       /* ストリング */
                        s = va_arg(ap, char *);
                        printf("string %s\n", s);
                        break;
                case 'd':                       /* 整数 */
                        d = va_arg(ap, int);
                        printf("int %d\n", d);
                        break;
                case 'c':                       /* キャラクタ */
                        /* 注意: キャラクタは整数を生成する。 */
                        c = va_arg(ap, int);
                        printf("char %c\n", c);
                        break;
                }
        va_end(ap);
}
 

索引

規格

Fn va_start , Fn va_arg , Fn va_end の各マクロは St -isoC に適合しています。  

索引

互換性

これらのマクロは、置き換えられる歴史的なマクロと互換性がありま せん 。 後方互換バージョンはインクルードファイル Aq Pa varargs.h の中にあります。  

索引

バグ

varargs マクロと違って、 マクロでは、プログラマは、固定した引数のない 関数を作成することができません。この問題は、主に varargs コードを コードに変換するときに作業を生じさせますが、 vfprintf(3) のように、 va_list 引数を取る関数にすべての引数を渡そうとする各種の関数についても困難を 生じさせます。


 

索引

Index

名称
書式
解説
使用例
規格
互換性
バグ

jman



Time: 07:07:09 GMT, January 12, 2009