17.6.4.3.1 Имена макросов [macro.names]
1 Перевод блок, который включает в себя стандартный заголовок библиотеки не должен #define или #undef имена, объявленные в любом стандартном заголовке библиотеки.
2 Единица перевода не должна содержать #define или #undef, лексически идентичные ключевым словам.
Итак, что бы вы ни делали после определения, семантика программы в любом случае не определена.
ОБНОВЛЕНИЕ: Техническое поведение не определено только при включении любого заголовка из стандартной библиотеки. Вы, кажется, так поступаете, когда используете cout. В любом случае, не включая стандартный заголовок, это очень тяжелое ограничение.
предыдущий стандарт цитата предшествует:
17.6.4.3 зарезервированные имена [reserved.names]
1 C++ стандарт резервирует библиотеки следующие виды имен:
- макросы
- глобальные названия
- имена с внешней связью
2 Если программа объявляет или определяет имя в контексте, где оно зарезервировано, кроме как явно разрешено is Clause, его поведение не определено.
Зачем вам это делать в первую очередь? –
Я просто хочу определить использование #define в любой программе. – sunkuet02
Затем вам нужен инструмент, который читает файл кода и перечисляет все строки #define. –