В процессе трансляции определенную информацию содержат следующие предопределенные макроимена.
__LINE__ десятичная константа, содержащая номер текущей строки текста программы на С++ __FILE__ строка литералов, представляющая имя транслируемого входного файла __DATE__ строка литералов, представляющая дату трансляции в виде "Mmm dd yyyy" или "Mmm d yyyy", если число меньше 10, (здесь Mmm задает месяц, dd - день, а yyyy - год) __TIME__ строка литералов, представляющая время трансляции в виде "hh:mm:ss", (здесь hh задает часы, mm - минуты, а ss - секунды)Кроме того, считается определенным при трансляции программы на C++ макроимя __cplusplus.
Перечисленные макроимена нельзя как переопределять, так и отменять их определения.
Макроимена __LINE__ и __FILE__ можно определить с помощью команды #line (§R.16.6).
Определено ли макроимя __STDC, и если да, то каково его значение, зависит от реализации.
R.17 Приложение A: Сводка грамматики
Это приложение не относится к справочному руководству языка и не является определением конструкций C++.
Оно только должно служить более полному пониманию С++. Нельзя рассматривать его как точное определение языка, так как описанная здесь грамматика допускает произвольное множество конструкций, каждая из которых законна для С++. Чтобы различать выражения и описания, следует применять правила разрешения неопределенности (§R.6.8, §R.7.1, §R.10.1.1). Далее, для отсеивания синтаксически правильных, но бессмысленных, конструкций следует применять правила контроля доступа, разрешения неопределенности и контроля типа.
R.17.1 Служебные слова
В описаниях: typedef (§R.7.1.3), класса (§R.9), перечисления (§R.7.2), шаблона типа - (§R.14) введены новые, зависящие от контекста, служебные слова, а именно:
имя-класса:
идентификатор
имя-перечисления:
идентификатор
имя-typedef:
идентификатор
Отметим, что имя-typedef, обозначающее класс, является в то же время конструкцией имя-класса (§R.9.1).
R.17.2 Выражения
выражение:
выражение-присваивания
выражение , выражение-присваивания
выражение-присваивания:
выражение-условия
унарное-выражение операция-присваивания выражение-присваивания
операция-присваивания: один из
= *= /= %= += -= ››= ‹‹= &= ^= |=
выражение-условия:
логическое-выражение-ИЛИ
логическое-выражение-ИЛИ ? выражение : выражение-условия
логическое-выражение-ИЛИ:
логическое-выражение-И
логическое-выражение-ИЛИ || логическое-выражение-И
логическое-выражение-И:
выражение-ИЛИ
логическое-выражение-И && выражение-ИЛИ
выражение-ИЛИ:
выражение-исключающего-ИЛИ
выражение-ИЛИ | выражение-исключающего-ИЛИ
выражение-исключающего-ИЛИ:
выражение-И
выражение-исключающего-ИЛИ ^ выражение-И
выражение-И:
выражение-равенства
выражение-И & выражение-равенства
выражение-равенства:
выражение-отношения
выражение-равенства == выражение-отношения
выражение-равенства != выражение-отношения
выражение-отношения:
сдвиговое-выражение
выражение-отношения ‹ сдвиговое-выражение
выражение-отношения › сдвиговое-выражение
выражение-отношения ‹= сдвиговое-выражение
выражение-отношения ›= сдвиговое-выражение
сдвиговое-выражение:
аддитивное-выражение
сдвиговое-выражение ‹‹ аддитивное выражение
сдвиговое-выражение ›› аддитивное выражение
аддитивное-выражение:
мультипликативное-выражение
аддитивное выражение + мультипликативное-выражение
аддитивное-выражение - мультипликативное-выражение
мультипликативное-выражение:
выражение-pm
мультипликативное-выражение * выражение-pm
мультипликативное-выражение / выражение-pm
мультипликативное-выражение % выражение-pm
выражение-pm:
выражение-приведения
выражение-pm .* выражение-приведения
выражение-pm -›* выражение-приведения
выражение-приведения:
унарное-выражение
( имя-типа ) выражение-приведения
унарное-выражение:
постфиксное-выражение
++ унарное выражение
-- унарное выражение
унарная-операция выражение-приведения
sizeof унарная-операция
sizeof ( имя-типа )
выражение-размещения
выражение-освобождения
унарная-операция: один из
* & + - ! ~
выражение-размещения: