ホーム | ブログ | C++辞典 | サイトマップ | FAQ | 掲示板 | リンク集
メイン・メニュー
インデックス
プログラミング
その他
Top / <cstdarg>ヘッダ

<cstdarg>ヘッダ

 <cstdarg>ヘッダは、翻訳時には関数実引数の数とが分からない場合に、その実引数の並びを処理するための方法を提供する。

マクロ

va_start

可変個引数処理の開始

形式
  void va_start(va_list ap, 最終仮引数);

引数
  ap:  可変個引数リスト
  最終仮引数:  仮引数並びの最右端の仮引数

解説
 va_arg マクロおよび va_end マクロに必要な可変個引数リスト ap を初期化する。最終仮引数 には、仮引数並びの最も右端 (... の直前)の識別子を指定しなければならない。最終仮引数 が次のいずれかのの場合、その動作は未定義である*1

  • 関数型
  • 配列型
  • 参照型
  • 仮引数が宣言されていない場合に、実引数に対して適用される型変換後のに適合しない

 一度 va_start マクロを呼び出した ap に対しては、va_end マクロを呼び出すまで、再び va_start マクロを呼び出すことができない。

va_end

可変個引数処理の終了

形式
  void va_end(va_list ap);

引数
  ap:  可変個引数リスト

解説
 va_end マクロは、可変個引数リスト ap を初期化するために呼び出したva_start マクロが展開された関数から、正常に復帰できるようにするために使用する。一度初期化された ap は va_end マクロが呼び出されるまで、再利用することはできない。

va_arg

可変個実引数並びのアクセス

形式
  va_arg(va_list ap, );

引数
  ap:  可変個引数リスト
  :  参照する実引数の型

返却値
 ap が指す次の実引数の値を返す。

解説
 va_arg マクロは、 を持つ可変個引数リスト ap が指す次の実引数を参照する。ap は、事前に va_start マクロによって初期化されていなければならない。va_arg マクロは、呼び出されるたびに、次の実引数を指すように ap を更新する。 に指定するものは、そのへのポインタ?を表すのに、単に * とすることができるものでなければならない。アクセスしようとした実引数が実際には存在しなかった場合、または、その実際の型 (仮引数が宣言されていない場合に、実引数に対して適用される型変換後の) が と適合しない場合の動作は未定義である。ただし、次の場合を除く。


va_list

可変個引数リスト型

解説
 va_start マクロva_end マクロ および va_arg マクロで使用される処理系定義のオブジェクト型。可変個引数の現在のアクセス位置を保持するために使用される。
 va_list 型の実引数 (ap とする) を関数に渡し、呼び出し先の関数内で、対応する仮引数 ap に対して va_arg マクロを呼び出した場合、呼び出し側では ap は不定となる。呼び出し側で ap を参照する前に呼び出し先で va_end マクロが呼び出さなければならない。va_list 型のポインタ?を他の関数に渡した場合、その関数から復帰した後でも、元の va_list オブジェクトを使い続けることができる。


参照

<stdarg.h>ヘッダ


*1 C の場合と異なり、register 指定子が付いていても構わない。

トップ   編集 差分 バックアップ 添付 複製 名前変更   一覧 単語検索   ヘルプ   最終更新のRSS
Counter: 5836, today: 1, yesterday: 1
Last-modified: Wed, 07 Dec 2005 18:41:31 JST (4917d)
 ホーム | プロフィール | メール | ログイン | 管理
Copyright © 2005-2009 by TAKAGI Nobuhisa