Я пытаюсь использовать следующий код в 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
Вы должны выяснить, как читать предварительно обработанный код с помощью компилятора, это всегда полезно при устранении путаницы, вызванной макросами.
Других решений пока нет …