[ C言語 ] printf ライクな可変長引数の関数 ( va_list va_start va_end )

Pocket

ここでは、printf 関数のような可変長パラメータを持つ関数のサンプルコードを掲載しています。第1パラメータにフォーマットの文字列を持ち、2つ目以降のパラメータは任意の個数(複数)という関数です。

スポンサーリンク

可変長引数の関数サンプル

1つ目にフォーマットの文字列を持ち、2つ目以降可変長引数です。va_*** ではじまる関数や型を使用して可変長引数を処理します。機械的に覚えておいても良いでしょう。( va_list, va_start. va_end )

#include <stdio.h>
#include <stdarg.h>

void debug_print(char* message,...)
{    
    va_list ap;
    va_start(ap, message);

    // 標準エラー出力にデバッグメッセージを出力する
    fprintf(stderr, "[DEBUG] ");
    vfprintf(stderr, message, ap);
    fprintf(stderr, "\n");

    va_end(ap);    
}

// 使用方法
debug_print("[%d] [%s]", 100, "愛のメモリー");

// 出力結果結果
// [DEBUG] [100] [愛のメモリー]

printf 関数は標準出力にメッセージを出力しますので、その代わりに標準エラー出力に出力するデバッグ関数をサンプルとして作成しました。なお、stderr ( 標準エラー出力 ) は stdio.h に定義されています。

stdin.h に宣言されている定義

定義内容
stdin標準入力
stdout標準出力
stderr標準エラー出力

美しい人生よ~ 限りない喜びよ~

スポンサーリンク


Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>