printf(...)見たいな関数の作り方です。
va_list型の変数と
va_start、va_arg、va_endの3つのマクロを使用します。
とりあえずサンプルを2つです。
1つ目は、引数で与えたint型の値の合計値を求めます。
注意点は、va_argで引数を順番に取得しますがいくつの引数があるかわからない為、最後に指定された-1を判定に使っています。
ので、厳密には使えない関数ですね。使い方がわかればOKということで大人の対応をお願いします。
va_argで取得できる引数は2つ目からであることにも注意です。
2つ目は、fprintf()をもっとお手軽に使ってデバッグ出力をしようという関数です。
<Category : C/C++>
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, ... )
{
////////////////////////////////////////////////////////
// ファイルへ出力する
void DebugOutput(TCHAR *format, ...)
{
#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{
va_end( arg_list ); //終了処理
return sum;
}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){
}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);
}fclose(fp);