C++ で次のコードを使用しようとしています。エラーが表示される理由を教えてもらえますか?
#define def namespace;
using def std;
int main(){
return 0;
}
次のコードが正常に動作している間
#define def namespace std;
using def;
int main(){
return 0;
}
これは、セミコロンが埋め込まれているためです。
#define def namespace;
^
|
WHOA!
#define
それ自体は定義を終了するためにセミコロンを必要としないことに注意してください。したがって、セミコロンを使用すると、マクロが使用される場所に挿入されるテキストの一部になります。
前処理の後、最初の例ではusing
行が次のように変わります。
using namespace; std;
明らかに構文上の問題があります。
#define
修正は、次のように、行の末尾のセミコロンを削除することです。
#define def namespace
コンパイラで前処理されたコードを読み取る方法を理解する必要があります。これは、マクロによって引き起こされた混乱を正すときに常に有益です。