Объявленное в define макроимя известно препроцессору от точки его объявления до конца файла или пока не встретится директива
# undef имя
Например, #undef DEBUG
Если в последующем тексте встретится имя DEBUG, оно будет рассматриваться как обычное, а не препроцессорное имя.
Имеется ряд предопределенных макроимен, предусмотренных стандартами на языки C и C++, в том числе:
_ _LINE_ _ - номер строки в исходном файле,
_ _FILE_ _ - имя обрабатываемого файла,
_ _DATE_ _ - дата начала обработки препроцессором,
_ _TIME_ _ - время начала обработки,
_ _STDC_ _ - программа должна соответствовать стандарту ANSI.
_ _cplusplus - компилировать программу в соответствии с синтаксисом Си++,
_ _PASCAL_ _ - последующие имена по умолчанию имеют тип “имя языка Pascal”
Предопределенные имена нельзя объявлять в #define или отменять в #undef.