読者です 読者をやめる 読者になる 読者になる

ガレスタさんのDIY日記

電子回路、Web、組み込み、自作エフェクターを語るblog

C言語可変引数マクロについて

マイコンのDEBUG関数関連見てて

#if defined(DEBUG_ENABLE)
#if defined(DEBUG_SEMIHOSTING)
#define DEBUGINIT()
#define DEBUGOUT(...) printf(__VA_ARGS__)
#define DEBUGSTR(str) printf(str)
#define DEBUGIN() (int) EOF

#else
#define DEBUGINIT() Board_Debug_Init()
#define DEBUGOUT(...) printf(__VA_ARGS__)
#define DEBUGSTR(str) Board_UARTPutSTR(str)
#define DEBUGIN() Board_UARTGetChar()
#endif /* defined(DEBUG_SEMIHOSTING) */

的な”・・・”を多用したやつ見かけて調べてみた。

可変引数と呼ばれているみたいだ。

gccでは __VA_ARGS__ という記述でできるみたい。

printfなんかは引数が変化するのでラッピングするのは結構難しいけどこれ使うと結構いい感じにできるっぽい