Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по С++.doc
Скачиваний:
49
Добавлен:
02.05.2014
Размер:
995.33 Кб
Скачать

R.16.7 Команда error

Строка вида: #error строка-лексем заставляет реализацию выдать диагностическое сообщение, состоящее из заданной последовательности лексем препроцессора.

R.16.8 Команда pragma

Строка вида: #pragma строка-лексем заставляет реализацию вести себя некоторым определенным образом при условии что реализация "понимает" эту строку. Любая нераспознанная строка #pragma игнорируется.

R.16.9 Пустая директива

Команда препроцессора вида # не оказывает никакого действия.

R.16.10 Предопределенные макроимена

В процессе трансляции определенную информацию содержат следующие предопределенные макроимена. __LINE__ десятичная константа, содержащая номер текущей строки текста программы на С++. __FILE__ строка литералов, представляющая имя транслируемого входного файла. __DATE__ строка литералов, представляющая дату трансляции в виде "Mmm dd yyyy" или "Mmm d yyyy", если число меньше 10, (здесь Mmm задает месяц, dd - день, а yyyy - год). __TIME__ строка литералов, представляющая время трансляции в виде "hh:mm:ss", (здесь hh задает часы, mm - минуты, а ss - секунды). Кроме того, считается определенным при трансляции программы на С++ макроимя __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 ( имя-типа ) выражение-размещения выражение-освобождения унарная-операция: один из * & + - ! ~ выражение-размещения: ::opt new параметры-new opt имя-типа-new инициализатор-new ::opt new параметры-new opt ( имя-типа ) инициализатор-new параметры-new: ( список-выражений ) имя-типа-new: список-спецификаций-типа описатель-new opt описатель-new: * список-спецификаций-cv opt описатель-new opt имя-класса :: список-спецификаций-cv opt описатель-new opt описатель-new opt [ выражение ] инициализатор-new: ( список-инициализаторов opt ) выражение-освобождения: ::opt delete выражение-приведения ::opt delete [] выражение-приведения постфиксное-выражение: первичное-выражение постфиксное-выражение [ выражение ] постфиксное-выражение ( список-выражений opt ) имя-простого-типа ( список-выражений opt ) постфиксное-выражение . имя постфиксное-выражение -> имя постфиксное-выражение ++ постфиксное-выражение -- список-выражений: выражение-присваивания список-выражений , выражение-присваивания первичное-выражение: литерал this :: идентификатор :: имя-функции-операции :: уточненное-имя ( выражение ) имя имя: идентификатор имя-функции-операции имя-функции-преобразования ~имя-класса уточненное-имя уточненное-имя: уточняющее-имя-класса :: имя литерал: целая константа символьная константа константа с плавающей точкой строка литералов