19 Preprocessing directives [cpp]

19.8 Predefined macro names [cpp.predefined]

Следующие имена макросов должны быть определены реализацией:

  • __cplusplus
    Целочисленный литерал 201703L.152

  • __DATE__
    Дата перевода исходного файла: символьный строковый литерал формы "Mmm dd yyyy", где названия месяцев совпадают с названиями месяцев, сгенерированными asctime функцией, а первый символ dd - это пробел, если значение меньше 10. Если дата перевода недоступна, должна быть указана действительная дата, определяемая реализацией.

  • __FILE__
    Предполагаемое имя текущего исходного файла (литерал символьной строки).153

  • __LINE__
    Предполагаемый номер строки (в текущем исходном файле) текущей исходной строки (целочисленный литерал).154

  • __STDC_­HOSTED__
    Целочисленный литерал, 1 если реализация является размещенной реализацией, или целочисленный литерал, 0 если это не так.

  • __STDCPP_­DEFAULT_­NEW_­ALIGNMENT__
    Целочисленный литерал типа std​::​size_­t , значение которого является выравниванием, гарантированным вызовом operator new(std​::​size_­t) или operator new[](std​::​size_­t). [ Note: Большие выравнивания будут переданы и operator new(std​::​size_­t, std​::​align_­val_­t)т. Д. ([expr.new]). ]end note

  • __TIME__
    Время перевода исходного файла: символьный строковый литерал формы, "hh:mm:ss" как во времени, сгенерированном asctime функцией. Если время трансляции недоступно, должно быть указано действительное время, определяемое реализацией.

Следующие имена макросов условно определены реализацией:

  • __STDC__
    Предопределено ли __STDC__ оно заранее, и если да, то каково его значение, определяется реализацией.

  • __STDC_­MB_­MIGHT_­NEQ_­WC__
    Целочисленный литерал 1, предназначенный для обозначения того, что в кодировке для wchar_­tчлен базового набора символов не обязательно должен иметь кодовое значение, равное его значению, при использовании в качестве одиночного символа в обычном символьном литерале.

  • __STDC_­VERSION__
    Предопределено ли __STDC_­VERSION__ оно заранее, и если да, то каково его значение, определяется реализацией.

  • __STDC_­ISO_­10646__
    Целочисленный литерал формы yyyymmL (например, 199712L). Если этот символ определен, то каждый символ в требуемом наборе Unicode, когда он хранится в объекте типа wchar_­t, имеет то же значение, что и короткий идентификатор этого символа. Он Unicode required set состоит из всех символов, определенных в ISO / IEC 10646, вместе со всеми поправками и техническими исправлениями по состоянию на указанный год и месяц.

  • __STDCPP_­STRICT_­POINTER_­SAFETY__
    Определен и имеет значение целочисленного литерала 1 тогда и только тогда, когда реализация имеет strict pointer safety.

  • __STDCPP_­THREADS__
    Определен и имеет значение целочисленного литерала 1 тогда и только тогда, когда программа может иметь более одного thread of execution.

Значения предопределенных макросов (кроме __FILE__ и __LINE__) остаются постоянными во всей единице перевода.

Если какое-либо из предварительно определенных имен макросов в этом подпункте или идентификатор definedявляется предметом директивы#define или #undefдирективы предварительной обработки, поведение не определено. Любые другие предопределенные имена макросов должны начинаться с символа подчеркивания в начале, за которым следует заглавная буква или второй знак подчеркивания.

Предполагается, что в будущих версиях этого международного стандарта значение этого макроса будет заменено на большее значение. Несоответствующие компиляторы должны использовать значение, содержащее не более пяти десятичных цифр.

Предполагаемое имя исходного файла можно изменить с помощью #line директивы.

Предполагаемый номер строки может быть изменен #line директивой.