6
#define B 100+B
main()
{
    int i= B;
}

私はそれが間違っていることを知っていますが、好奇心から、コンパイルすると次の奇妙なエラーが発生します。

「B はこのスコープで宣言されていません」。

なぜそうなのですか?このエラーが、置換後にコンパイラがマクロを削除したことが原因である場合、 B がAで使用できるようになる前にBが削除されている必要がある場合、次のコードはどのように機能するのでしょうか?

#define B 100
#define A 100+B
main()
{
    int i= B;
    int j =A;
}
4

3 に答える 3

0

マクロの置換は単純なテキスト操作です。このタイプの問題は、単純な段階的なコンパイルでデバッグできます。

cc -E filename.c -O filename.i を使用

拡張 C コードの生成用

ピュア/拡張 C コードを読み取るための vi filename.i

于 2012-08-05T18:18:24.897 に答える