私はあまりCプログラマーではありませんが、Cマクロは、プリプロセッサがマクロ定義を取得し、マクロ名が表示される場所に配置する、検索と置換の機能のようなものであると想定していました。
これは、Dragon Bookの動的スコープルールの例と、それらがマクロにどのように適用されるかを示しています。
#define a (x + 1)
int x = 2;
void b () { int x = 1; printf("%d\n", a); }
void c () { printf("%d\n", a); }
void main () { b(); c(); }
また、動的スコープルールがx
マクロ内の名前にどのように適用されるかについても説明しますa
。a
私はそれが基本的にプログラムを置き換えてからコンパイルするだろうと仮定していたので、スコープルールはあなたが代わりに(x + 1)
書いた場合とまったく同じになるでしょう(これは静的スコープルールになります)。(x + 1)
a
誰かがこれを明確にすることができますか?
編集:参照されている本はコンパイラ:原則、技術、ツール第2版です。引用された例は31-32ページからのものです。