本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 5 : その他の機能 > s

stdarg(5)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

stdarg.h ― 可変個の引き数リストを操作するマクロ

構文

#include <stdarg.h> 
 
void va_start(va_list pvar, argN); 
type va_arg(va_list pvar, type); 
void va_end(va_list pvar); 

説明

<stdarg.h> ヘッダには、 可変個の引き数リストを受け取ることのできる手続きを、 移植可能な方法で書くための、 マクロの集合があります。 (printf() のように) 可変個の引き数リストを持つルーチンを stdarg を使わずに書くと、 引き数を渡す規約がマシンごとに異なっていますので、 移植不可能になってしまいます。

va_list は、リストをトラバースするのに使われる変数のために定義された型です。

va_start は、 pvar を初期化してリストの先頭を指すようにするために呼び出します。 argN の型は、 関数の引き数リストの可変部分の直前の引き数と同じでなければなりません。

va_arg は、リストの中で pvar で指し示される、次の引き数を返します。 type は、取り出す引き数の型です。 異なった型を混合することができますが、 ルーチンには取り出す引き数がどの型なのかを知らせる必要があります。 実行時には判定できないからです。

va_end は、クリーンアップに使います。

それぞれを va_start ... va_end で囲むと、複数のトラバーサルができます。

注記: <stdarg.h> ヘッダーファイルは <varargs.h> ヘッダーを置き換えるものであり、 varargs マクロがすべて含まれています。 <varargs.h> は、ANSI 以前のコンパイラおよび HP C/HP-UX の以前のリリースとの互換性を保つために提供されています。

この例は、 execl のインプリメンテーションです ( exec(2)を参照)。

#include <stdarg.h>
#define MAXARGS 100
 
/*  execl is called by
    execl(file, arg1, arg2, ..., (char *)0);
*/
execl(const char *file, const char *args, ...)
{
    va_list ap;
    char *array[MAXARGS];
    int argno = 0;
 
    va_start(ap, args);
    if ((array[0] = args) != 0)
        while ((array[argno++] = va_arg(ap, char *)) != 0)
           ;
    va_end(ap);
    return execv(file, array);
}

警告

引き数の数は、 スタックフレームより判定できない場合があるので、 ルーチンを呼ぶときに指定します。 例えば、 execl() ではリストの終わりを知らせるのにゼロポインタを渡し、また printf() ではフォーマットの文字列により、引き数の数を知らせることができます。

ANSI C を使わない場合は、 va_arg の 2 番目の引き数に char, short, あるいは float を指定すると、移植不可能になるかもしれません。 なぜなら、呼び出された関数では、引き数は決して char, short, あるいは float ではないからです。

ANSI C 以前の C では、引き数を関数に渡す前に、 char および short 引き数を int に変換し、また float 引き数を double に変換します。

参照

exec(2)、 vprintf(3S)、 varargs(5)

標準準拠

<stdarg.h>: AES, SVID3, XPG4, FIPS 151-2, POSIX.1, ANSI C

va_arg: SVID3, XPG4, ANSI C

va_end: SVID3, XPG4, ANSI C

va_list: SVID3, XPG4, ANSI C

va_start: SVID3, XPG4, ANSI C

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.