Я просматривал code golf и получил представление о том, чтобы попробовать этот код:Можно ли определить другую директиву препроцессора?
#define D #define
после добавления этой строки, все работало нормально, однако я расширил его в этом:
#define D #define
D VALUE
И вот я получил 5 ошибка компиляции. Если я изменю D
на #define
все в порядке, может кто-нибудь объяснить, почему этот код является незаконным?
ПРИМЕЧАНИЕ: Я использовал компилятор VS2008.
EDIT: После некоторых ответов, я вижу, что мне нужно, чтобы дать сборникам списка ошибок:
- ошибку C2121: «#»: недопустимый знак: возможно, в результате макроподстановок
- ошибки C2146 : синтаксическая ошибка: отсутствует ';' перед идентификатором «VALUE»
- ошибка C4430: спецификатор отсутствующего типа - int предполагается. Примечание: C++ не поддерживает default-int Ошибка
- Ошибка C2144: ошибка синтаксиса: перед 'void' должно предшествовать ';'
- ошибка C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает по умолчанию-ИНТ
Первая ошибка показывает, что D
не только define
, но и включает в себя #
.
Поскольку это зависит от реализации, укажите, какой компилятор вы используете. –
"почему этот код является незаконным?" - Потому что вы не можете переопределить директивы препроцессора. –
@ H2CO3 Я смог переопределить его, потому что первый раз он работал, однако после использования этого определения я получил ошибку компиляции. – ST3