EntryNavi : « ほうじ茶 とうふ | メイン | Windowsにおけるマルチバイト文字とワイド文字の変換 »

CategoryNavi : メイン -> コンピューター -> 開発 -> C/C++

可変個引数の関数

printf(...)見たいな関数の作り方です。

va_list型の変数と
va_start、va_arg、va_endの3つのマクロを使用します。

とりあえずサンプルを2つです。
1つ目は、引数で与えたint型の値の合計値を求めます。
注意点は、va_argで引数を順番に取得しますがいくつの引数があるかわからない為、最後に指定された-1を判定に使っています。
ので、厳密には使えない関数ですね。使い方がわかればOKということで大人の対応をお願いします。
va_argで取得できる引数は2つ目からであることにも注意です。
2つ目は、fprintf()をもっとお手軽に使ってデバッグ出力をしようという関数です。


#include <stdio.h>
#include <tchar.h>
#include <stdarg.h> //va_list etc

////////////////////////////////////////////////////////
// intの合計値を求める
// 最後に-1を必ずつけること
int Sum(int num, ... )
{
va_list arg_list;
int count = 0, sum = 0, i = 0;

va_start( arg_list, num ); //初期化
i = num;
do{
sum += i;
}while((i = va_arg(arg_list,int)) != -1); //引数をひとつずつ取得(2つ目から)
va_end( arg_list ); //終了処理

return sum;
}

////////////////////////////////////////////////////////
// ファイルへ出力する
void DebugOutput(TCHAR *format, ...)
{
va_list arg_list;
TCHAR buffer[256];

va_start(arg_list, format);
_vstprintf(buffer, format, arg_list);
va_end(arg_list);

FILE *fp;
if((fp = _tfopen(_T("debug.txt"),_T("a"))) != NULL){
_ftprintf(fp,_T("%s"),buffer);
fclose(fp);
}
}
<Category : C/C++>

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34