Чтение онлайн

на главную

Жанры

Справочное руководство по 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 Выражения

выражение:

 выражение-присваивания

 выражение , выражение-присваивания

выражение-присваивания:

 выражение-условия

 унарное-выражение операция-присваивания выражение-присваивания

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

 = *= /= %= += -= ››= ‹‹= &= ^= |=

выражение-условия:

 логическое-выражение-ИЛИ

Поделиться:
Популярные книги

Лорд Системы 12

Токсик Саша
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 12

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Инферно

Кретов Владимир Владимирович
2. Легенда
Фантастика:
фэнтези
8.57
рейтинг книги
Инферно

Нефилим

Демиров Леонид
4. Мания крафта
Фантастика:
фэнтези
боевая фантастика
рпг
7.64
рейтинг книги
Нефилим

Девятое правило дворянина

Герда Александр
9. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Девятое правило дворянина

Странник

Седой Василий
4. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Странник

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Кодекс Охотника. Книга XXV

Винокуров Юрий
25. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга XXV

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

Отмороженный 3.0

Гарцевич Евгений Александрович
3. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 3.0

Огни Аль-Тура. Завоеванная

Макушева Магда
4. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.00
рейтинг книги
Огни Аль-Тура. Завоеванная

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3