[cpp. Секунда] / 2 в N4713 - PullRequest
       34

[cpp. Секунда] / 2 в N4713

1 голос
/ 22 апреля 2020

[cpp .cond] / 2 в N4713:

A определено-макро-выражение оценивается как 1, если идентификатор в настоящее время определен как макрос имя (то есть, если оно предопределено или , если оно было предметом директивы #define предварительной обработки без промежуточной директивы #undef с тем же идентификатором субъекта), 0, если это не так .

Я не понимаю или выше. То есть, как имя макроса может быть предопределено, не будучи предметом директивы #define предварительной обработки?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Потому что компиляторы могут создавать макросы. Они делают это постоянно, и это утверждение является частью того, что позволяет им это делать. На самом деле стандарт требует их; существует множество макросов , которые согласно стандарту требуют реализации. К ним относятся __cplusplus (версия C ++), __FILE__ (имя обрабатываемого файла) и т. Д.

2 голосов
/ 22 апреля 2020

Реализация предопределяет некоторые макросы без необходимости пользователя #define. Список стандартных предопределенных имен макросов можно найти в [cpp .predefined]. Он включает, например, __FILE__ и __LINE__.

...