C言語 可変引数リストの処理 - stdarg.h - [ va_list, va_start, va_end, va_arg ]

2008.09.10 Wednesday | by LRESULT


stdarg.hには、可変個の引数を取得するマクロが定義されています。

可変個の引数とは、"..."で表される引数です。
printf( "%d, %d", a, b );の「a, b」のように、
数が決められていない引数のことを可変個の引数といいます。


va_list
可変個の引数を格納する為の変数(可変引数リスト)。
実際には、typedef void *va_list ; という形で定義されてます


va_start
書式 void va_start( va_list ap, paraNum )
機能 可変個引数リストの初期化
引数 va_list ap : 可変個引数リスト
paraNum : 初期化する数
戻り値 なし



va_end
書式 void va_end( va_list ap )
機能 可変個引数リストの終了
引数 va_list ap : 可変個引数リスト
戻り値 なし



va_arg
書式 type va_arg( va_list ap, type )
機能 可変個引数リストから指定した型で取得
引数 va_list ap : 可変個引数リスト
type : 取得する型
戻り値 なし





サンプルコード
5個の可変個引数、"I", "Can", "Do", "It", "!!" を
va_listを利用して取得します。
#include <stdio.h>
#include <stdarg.h>

void func( int num, ... );

void main(void)
{
  func( 5, "I", "Can", "Do", "It", "!!" );
}

void func( int num, ... )
{
  va_list ap;
  int i;
  char *str;

  /* 可変引数リスト初期化 */
  va_start( ap, num );

  for( i=0; i<num; i++ ){
    /* 可変個の引数を取り出し */
    str = va_arg( ap, char* );
    printf( "%s ", str );
  }

  /* 可変引数リスト終了 */
  va_end( ap );
}



結果
I Can Do It !!
と、表示されるかと。

va_arg()で、引数を取り出す際には、char*を使用して
文字列で取り出しています。

カテゴリ:C言語 stdarg.h | 22:35 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/39

トラックバック