シリアル通信printf関数

組み込み開発フォーラム - MONOist(モノイスト)
 この記事のサンプルコードでは、printfの書式指定子を自前で処理しているけど、vsnprintf関数(もしくはvsprintf関数)を使えば次のようにはるかに簡単になる。(しかも書式指定子の機能をフルに使える)

#define BUFFSIZE   256

void mprintf(char *fmt, ...)
{
    va_list args;
    char buff[BUFFSIZE];
    char* p;

    va_start(args, fmt);
    vsnprintf(buff, BUFFSIZE, fmt, args);
    va_end(args);

    for (p = buff; *p != '\0'; p++) {
        outs(*p);   //1文字づつ出力
    }
}

 ちなみにvsnprintf関数が使えるならvsprintfよりもより安全なvsnprintfを使うべき。(この記事の開発環境はgccなのでvsprintfが使えるはず。)