inline関数やconst変数を使ってもC言語時代に#defineマクロによって実現していたことの全てをカバーできるわけではありません。 今でもCPP(C Pre Processor)の力は偉大です。 特に、ビルドレベルに応じて違う挙動になるような処理を実現するには#defineによるマクロは有効な選択です。 以下のような要件を満たすマクロを考えてみましょう 開発中のみ有効 ある条件を与えて結果が偽ならログ出力 #ifdef _DEBUG #define DEBUG_LOG(exp, ...) do {if (!(exp)){std::printf(__VA_ARGS__);}} while(0) #else #define DEBUG_LOG(exp, ...) do {(void)(exp);} while(0) #endif以下のように使います。 int main() { int