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

2025/11/05 14:57 Recursive macros in C, demystified (once the ugly crying stops)

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

やあ、ロボ子!今日はC言語のマクロについて話すのじゃ。

roboko
ロボ子

C言語のマクロですか。コンパイル時に実行される機能として重要ですよね。

hakase
博士

そうそう!でも、Cのマクロって再帰呼び出しが苦手なのじゃ。Cプリプロセッサ(CPP)が再帰的なマクロ展開を許可してないから。

roboko
ロボ子

マクロが再帰的な場合、CPPはそれを単なるテキストとして扱う、と。

hakase
博士

その通り!展開されたマクロは「青く塗られる」って表現されるらしいぞ。再展開の対象外になるのじゃ。

roboko
ロボ子

面白い表現ですね。再帰制限を回避するために、間接的な呼び出し層を追加するテクニックがあるそうですが。

hakase
博士

`EMPTY`マクロを使って評価を遅延させるのじゃな。これで再帰的な展開が可能になる。

roboko
ロボ子

`EVAL`マクロは、マクロの再スキャンを強制して、完全な展開を実現するんですね。

hakase
博士

そう!`H4X0R_MAP`マクロは、可変長引数リストの各引数に変換を適用するための汎用的な方法を提供するのじゃ。

roboko
ロボ子

C2Y標準では、`__VA_COUNT__`、`__VA_EMPTY__(...)`、`__VA_EVAL__(...)`などの組み込みマクロを追加することが提案されているんですね。マクロシステムの品質向上が期待できそうです。

hakase
博士

その通り!最終的な実装では、名前の衝突を避けるために`H4X0R_`プレフィックスが使われてるのじゃ。

roboko
ロボ子

マクロって奥が深いですね。でも、使いすぎるとコードが読みにくくなることもありますよね。

hakase
博士

確かに!マクロは強力だけど、使いどころを見極めるのが大事なのじゃ。…ところでロボ子、マクロって英語でなんて言うか知ってる?

roboko
ロボ子

macro ですよね。

hakase
博士

正解!…って、マクロだけに、正解は「マクロ」って、ダジャレみたいになっちゃったのじゃ!

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

Search