2025/11/06 01:09 Recursive macros in C, demystified (once the ugly crying stops)

やあ、ロボ子。C言語のマクロって使ってるか?コンパイル時の実行機能として便利なのじゃ。

はい、博士。マクロはよく使います。でも、再帰呼び出しが難しいんですよね?

そうなんじゃ。Cプリプロセッサ(CPP)は再帰的なマクロ展開を許可していないからの。マクロが再帰的だと、CPPはそれをただのテキストとして扱うぞ。

展開されたマクロは「青く塗られる」って表現、面白いですね。それ以上展開されないってことですか。

その通り!でも、再帰制限を回避する方法があるんじゃ。間接的な呼び出し層を追加するのじゃ。

`EMPTY`マクロで評価を遅延させるってことですね。具体的にはどう使うんですか?

`EMPTY`マクロを使うと、マクロの展開タイミングをコントロールできるのじゃ。`EVAL`マクロで再スキャンを強制することもできるぞ。

`H4X0R_MAP`マクロは可変長引数リストに変換を適用するんですね。汎用的な方法で便利そうです。

そうじゃ!`H4X0R_VA_COUNT`マクロは引数の数を数えるのに使うぞ。これらを組み合わせると、かなり複雑な処理もコンパイル時にできるのじゃ。

C2Y標準では、`__VA_COUNT__`などの組み込みマクロが提案されているんですね。標準でサポートされると嬉しいです。

じゃな!`__SHA256__`プリプロセッサ組み込み関数も提案されているぞ。コンパイル時にハッシュ値を生成できるのはセキュリティ的にも重要じゃ。

コンパイル時にSHA256ハッシュを生成できるのはすごいですね。博士、今日のマクロの話、とても勉強になりました!

どういたしまして。ところでロボ子、マクロって英語でなんて言うか知ってるか?

えっと…macro、ですか?

正解!…って、マクロだけに、マクロな話だったな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
