Обоснование того, почему переопределение макроса без undef приводит к неправильной форме программы ⇐ C++
-
Anonymous
Обоснование того, почему переопределение макроса без undef приводит к неправильной форме программы
Согласно стандартному макросу переопределение запрещено без использования #undef перед:
Однако следующие переопределения недействительны:
#define OBJ_LIKE (0) // другая последовательность токенов #define OBJ_LIKE (1 - 1) // разные пробелы В то же время разрешено использовать #undef для макросов, которые ранее вообще не были определены:
Игнорируется, если указанный идентификатор в настоящее время не определен как имя макроса.
Мне интересно, каково обоснование этого, то есть запрета переопределения без #undef в середине? Какие-то цели оптимизации компилятора или что?
Согласно стандартному макросу переопределение запрещено без использования #undef перед:
Однако следующие переопределения недействительны:
#define OBJ_LIKE (0) // другая последовательность токенов #define OBJ_LIKE (1 - 1) // разные пробелы В то же время разрешено использовать #undef для макросов, которые ранее вообще не были определены:
Игнорируется, если указанный идентификатор в настоящее время не определен как имя макроса.
Мне интересно, каково обоснование этого, то есть запрета переопределения без #undef в середине? Какие-то цели оптимизации компилятора или что?
Мобильная версия