Arduino系マイコンで超いいかげんなprintf

Arduino系のマイコンでprintfをシリアルに出力するためのいいかげんなマクロ

static char print_buff[256]; // ←メモリが許すなら十分大きくとる
#define printf(...)  sprintf(print_buff, __VA_ARGS__), Serial.print(print_buff)

sprintf()とSerial.print()の区切りがなぜ ; でなく , かというと、下記のようなif文の書き方があった場合にエラーになるため。

if(hoge)
    printf("hoge");
else
    printf("piyo");

printf()の戻り値を受け取るような場合にはエラーになるが、そんなことは滅多にしないだろう。

また、見ての通りリエントラントではないので割り込みやマルチタスクで使う場合は要注意。あくまでもテキトーにコピペしたコードを動かすための、間に合わせの超いいかげんなマクロである。