21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語でprintf魔改造

Posted at

こんにちは。kazuです。
今回は授業でprintfを使ったので、魔改造しました。
後でレポートを書くときに忘れないように記事にしてみました。

ことの発端

授業「複雑なプログラム書いてね!出力は要件を満たしてね!」
ぼく「デバッグ用の出力...」
ぼく「printfの関数名だけ変えてデバッグ出力管理したろ!」
マクロ「君のマクロはあぶないよ!」

...ということでマクロを使わずprintfと同じ使い方ができるデバッグ出力用の関数を作りました。

コード

#include <stdarg.h>

void debug_printf(const char *format, ...) {
    if(debug_mode){
        // 可変引数を処理するための準備
        va_list args;
        va_start(args, format);

        // デバッグメッセージの前に追加する文字列
        printf("\033[2m[DEBUG] ");

        // vprintfを使用して可変引数に対応する形でフォーマットされた出力を行う
        vprintf(format, args);

        // デバッグメッセージの終わりに追加する文字列
        printf("\033[0m");

        // 可変引数の処理を終了
        va_end(args);
    }
}

printfが内部で呼び出しているvprintf関数にformatとargsを渡すことで魔改造に成功しました。
\033[はエスケープシーケンスという最近ハマっているやつで、頑張ればBIOSやraspi-config的なのが作れちゃいます。
今回は\033[2mで文字の色を灰色に設定、最後に\033[0mで白に戻すという使い方をしました。

21
15
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?