萌えハッカーニュースリーダー

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

出典: https://h4x0r.org/big-mac-ro-attack/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

えっと…macro、ですか?

hakase
博士

正解!…って、マクロだけに、マクロな話だったな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search