Бьярн Страустрап - Справочное руководство по C++
- Название:Справочное руководство по C++
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Бьярн Страустрап - Справочное руководство по C++ краткое содержание
Справочное руководство по C++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
В выражении-константе, которое встретилось в #if или #elif можно использовать унарную операцию defined, причем в двух вариантах:
defined идентификатор
или
defined (идентификатор)
Если эта операция применяется к идентификатору, который был определен с помощью команды #define, и если это определение не было отменено командой #undef, то результат равен 1, иначе результат равен 0. Сам идентификатор defined нельзя переопределить, нельзя и отменить его определение.
После применения операций defined происходит раскрытие всех всех макроопределений, имеющихся в константном выражении см. §R.16.3. В результате должно получиться целочисленное выражение-константа, отличающееся от определения в §R.5.19 тем, что типы int и unsigned int рассматриваются как long и unsigned long соответственно, а кроме того в этом выражении не должно быть операций приведения, sizeof или элемента перечисления.
Управляющая строка
#ifdef идентификатор
эквивалентна строке
#if defined идентификатор
а управляющая строка
#ifndef идентификатор
эквивалентна строке
#if !defined идентификатор
Конструкции, задающие условную трансляцию, могут быть вложенными, но реализация может накладывать ограничение на глубину вложенности этих конструкций.
R.16.6 Управление строками
Для удобства написания программ, порождающих текст на С++, введена управляющая строка вида:
#line константа "имяфайла" opt
Она задает значение предопределенному макроимени __LINE__ (§R.16.10), которое используется в диагностических сообщениях или при символической отладке; а именно: номер следующей строки входного текста считается равным заданной константе, которая должна быть десятичным целым числом. Если задано "имяфайла", то значение макроимени __FILE__ (§R.16.10) становится равным имени указанного файла. Если оно не задано, __FILE__ не меняет своего значения.
Макроопределения в этой управляющей строке раскрываются до выполнения самой команды.
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 - секунды) |
Кроме того, считается определенным при трансляции программы на 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
Интервал:
Закладка: