2

C++ で次のコードを使用しようとしています。エラーが表示される理由を教えてもらえますか?

#define  def namespace;
using def std;
int main(){
return 0;
}

次のコードが正常に動作している間

#define  def namespace std;
using def;
int main(){
return 0;
}
4

1 に答える 1

17

これは、セミコロンが埋め込まれているためです。

#define  def namespace;
                      ^
                      |
                     WHOA!

#defineそれ自体は定義を終了するためにセミコロンを必要としないことに注意してください。したがって、セミコロンを使用すると、マクロが使用される場所に挿入されるテキストの一部になります。

前処理の後、最初の例ではusing行が次のように変わります。

using namespace; std;

明らかに構文上の問題があります。

#define修正は、次のように、行の末尾のセミコロンを削除することです。

#define def namespace

コンパイラで前処理されたコードを読み取る方法を理解する必要があります。これは、マクロによって引き起こされた混乱を正すときに常に有益です。

于 2013-02-14T09:31:17.503 に答える