こんにちは。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で白に戻すという使い方をしました。