Выбрать главу

В процессе трансляции определенную информацию содержат следующие предопределенные макроимена.

__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 ( имя-типа )

 выражение-размещения

 выражение-освобождения

унарная-операция: один из

 * & + - ! ~

 выражение-размещения: