Язык программирования C++ - это C*, расширенный введением
классов, inline-функций, перегруженных операций, перегруженных
имен функций, константных типов, ссылок, операций управления
свободной памятью, проверки параметров функций. Коротко различия
между С++ и "старым С" приведены в #15. В этом руководстве
описывается язык по состоянию на Июнь 1985.
Есть шесть классов лексем: идентификаторы, ключевые слова,
константы, строки, операторы и прочие разделители. Символы пробела,
табуляции и новой строки, а также комментарии (собирательно -
"белые места"), как описано ниже, игнорируются, за исключением тех
случаев, когда они служат разделителями лексем. Некое пустое место
необходимо для разделения идентификаторов, ключевых слов и
констант, которые в противном случае окажутся соприкасающимися.
Если входной поток разобран на лексемы до данного символа,
принимается, что следующая лексема содержит наиболее длинную строку
символов из тех, что могут составить лексему.
Символы /* задают начало комментария, заканчивающегося символами
*/. Комментарии не могут быть вложенными. Символы // начинают
комментарий, который заканчивается в конце строки, на которой они
появились.
Идентификатор - последовательность букв и цифр произвольной
длины; первый символ обязан быть буквой; подчерк '_' считается за
букву; буквы в верхнем и нижнем регистрах являются различными.
Следующие идентификаторы зарезервированы для использования в качестве ключевых слов и не могут использоваться иным образом:
Как описано ниже, есть несколько видов констант. В #2.6
приводится краткая сводка аппаратных характеристик, которые влияют
на их размеры.
Целая константа, состоящая из последовательности цифр, считается
восьмеричной, если она начинается с 0 (цифры ноль), и десятичной в
противном случае. Цифры 8 и 9 не являются восьмеричными цифрами.
Последовательность цифр, которой предшествует 0х или 0Х,
воспринимается как шестнадцатеричное целое. В шестнадцатеричные
цифры входят буквы от а или А до f или F, имеющие значения от 10 до
15. Десятичная константа, значение которой превышает наибольшее
машинное целое со знаком, считается длинной (long); восьмеричная и
шестнадцатеричная константа, значение которой превышает наибольшее
машинное целое со знаком, считается long; в остальных случаях целые
константы считаются int.
Десятичная, восьмеричная или шестнадцатеричная константа, за
которой непосредственно стоит l (латинская буква "эль") или L,
считается длинной константой.
Символьная константа состоит из символа, заключенного в одиночные
кавычки (апострофы), как, например, 'х'. Значением символьной
константы является численное значение символа в машинном наборе
символов (алфавите). Символьные константы считаются данными типа
int.
Некоторые неграфические символы, одиночная кавычка ' и обратная
косая \, могут быть представлены в соответствие со следующей
таблицей escape-последовательностей:
Escape-последовательность \ddd состоит из обратной косой, за
которой следуют 1, 2 или 3 восьмеричных цифры, задающие значение
требуемого символа. Специальным случаем такой конструкции является
\0 (не следует ни одной цифры), задающая пустой символ NULL.
Escape-последовательность \xddd состоит из обратной косой, за
которой следуют 1, 2 или 3 шестнадцатеричных цифры, задающие
значение требуемого символа. Если следующий за обратной косой
символ не является одним из перечисленных, то обратная косая
игнорируется.
Константа с плавающей точкой состоит из целой части, десятичной
точки, мантиссы, е или Е и целого показателя степени (возможно, но
не обязательно, со знаком). Целая часть и мантисса обе состоят из
последовательности цифр. Целая часть или мантисса (но не обе сразу)
может быть опущена; или десятичная точка, или е(Е) вместе с целым
показателем степени (но не обе части одновременно) может быть
опущена. Константа с плавающей точкой имеет тип double.
Имена, описанные как перечислители, (см. #8.5) являются
константами типа int.
Объект (#5) любого типа может быть определен как имеющий
постоянное значение во всей области видимости (#4.1) его имени. В
случае указателей для достижения этого используется декларатор
*const; для объектов, не являющихся указателями, используется
описатель const (#8.2).
Строка есть последовательность символов, заключенная в двойные
кавычки: "...". Строка имеет тип "массив символов" и класс памяти
static (см. #4 ниже), она инициализируется заданными символами. Все
строки, даже если они записаны одинаково, различны. Компилятор
располагает в конце каждой строки нулевой (пустой) байт \0 с тем,
чтобы сканирующая строку программа могла найти ее конец. В строке
перед символом двойной кавычки " обязательно должен стоять \; кроме
того, могут использоваться те же escape-последовательности, что
были описаны для символьных констант. И, наконец, символ новой
строки может появляться только сразу после \; тогда оба, - \ и
символ новой строки, - игнорируются.
В нижеследующей таблице собраны некоторые харктеристики
аппаратного обеспечения, различающиеся от машины к машине.
* "Язык программирования Си" Брайэна В. Кернигана и Денниса М.Ритчи. Это руководство было построено на основе "C Programming
Language - Reference Manual" системы UNIX V с разрешения AT&T Bell
Laboratories. (прим. автора)
1. Введение
2. Договоренности о лексике
2.1 Комментарии
2.2 Идентификаторы (имена)
2.3 Ключевые слова
asm auto break case char
class const continue default delete
do double else enum extern
float for friend goto if
inline int long new operator
overload public register return short
sizeof static struct switch this
typedef union unsigned virtual void
while
Идентификаторы signed и volatile зарезервированы для применения в
будущем.
2.4 Константы
2.4.1 Целые константы
2.4.2 Явно заданные длинные константы
2.4.3 Символьные константы
символ новой строки NL(LF) \n
горизонтальная табуляция NT \t
вертикальная табуляция VT \v
возврат на шаг BS \b
возврат каретки CR \r
перевод формата FF \f
обратная косая \ \\
одиночная кавычка (апостроф) ' \'
набор битов 0ddd \ddd
набор битов 0xddd \xddd
2.4.4 Константы с плавающей точкой
2.4.5 Перечислимые константы
2.4.6 Описанные константы
2.5 Строки
2.6 Харктеристики аппаратного обеспечения
DEC VAX-11 ASCII Motorola 68000 ASCII IBM 370 EBCDIC AT&T 3B ASCII char 8 бит 8 бит 8 бит 8 бит int 32 бит 16 бит 32 бит 16 бит short 16 бит 16 бит 16 бит 16 бит long 32 бит 32 бит 32 бит 32 бит float 32 бит 32 бит 32 бит 32 бит double 64 бит 64 бит 64 бит 64 бит указатель 32 бит 32 бит 24 бит 32 бит диапазон float +_10E+_38 +_10E+_38 +_10E+_76 +_10E+_38 диапазон double +_10E+_38 +_10E+_38 +_10E+_76 +_10E+_308 тип char знаковый без знака без знака без знака тип поля знаковый без знака без знака без знака порядок справа слева слева слева полей налево направо направо направо
|