Управляющие последовательности

Строки и символьные константы могут содержать "управляющие последовательности". Управляющие последовательности это комбинации символов, состоящие из разделительного символа и неграфических символов. Управляющая последовательность состоит из знака обратного деления (\) за которым следует буква или комбинация цифр.

Управляющие последовательности обычно используются для задания каких-либо действий (например, возврат каретки или сдвиг на табуляцию на экране или на принтере) или для литерального представления неграфических символов и символов, имеющих специальное значение (например, двойные цитатные скобки - "). Таблица 2.2 содержит список управляющих последовательностей.

Таблица 2.2. Управляющие последовательности Управляющая Название последовательность \n новая строка \t горизонтальная табуляция \v вертикальная табуляция \b забой \r возврат каретки \f смена листа \a зуммер \' одинарная цитатная скобка \" двойная цитатная скобка \\ обратное деление \ddd восьмеричное значение символа ASCII \xddd шестнадцатеричное значение символа ASCII

Если знак обратного деления предшествует символу, которого нет в Таблице 2.2, то знак обратного деления игнорируется, а сам символ воспринимается буквально. Например, \c представляет собой символ "с" в строковом литерале или символьной константе. Однако, использование строчных букв в управляющих последовательностях зарезервировано для будущей стандартизации. Т.о. хотя появления неопределенных управляющих последовательностей и не вызывает проблем сейчас, потом могут возникнуть проблемы мобильности программного обеспечения.

Последовательность \ddd позволяет задавать любой символ ASCII (Стандартный Код США по Обмену Информацией), указывая его восьмеричный код из трех цифр. Аналогично, последовательность \xddd позволяет задавать любой символ ASCII, указывая его шестнадцатеричный код из трех цифр. Например, пробел можно указать как \b, \010 (восьмеричное значение) или \x008 (шестнадцатеричное значение).

В восьмеричных управляющих последовательностях можно использовать только цифры от 0 до 7. Хотя и не нужно использовать все три цифры (как это показано в предыдущем абзаце), нужно указать хотя бы одну. Например, можно задать символ забоя ASCII в восьмеричном представлении, как \10. Аналогично, можно использовать по крайней мере одну цифру в шестнадцатеричной управляющей последовательности, и опустить вторую и третью цифру. Более того, можно задать пробел в шестнадцатеричном представлении, как \x08 или \x8.

Примечание

При использовании в строках восьмеричного или шестнадцатеричного представления управляющих последовательностей более безопасно задавать все три цифры. Если не задать все три цифры в управляющей последовательности, а за ней непосредственно следует восьмеричное или шестнадцатеричное число, то компилятор интерпретирует этот символ, как часть управляющей последовательности. Например, если напечатать строку "\x07Bell", то результатом будет {ell, т.к. \x07B будет интерпретировано, как левая фигурная скобка ASCII ({). Строка \x007Bell (обратите внимание на два ведущих нуля) является корректным представлением символа зуммера, за которым следует слово Bell. Строка \x7Bell вызовет появление диагностического сообщения компилятора, т.к. шестнадцатеричная величина 7BE слишком велика, чтобы поместиться в один байт.

Управляющие последовательности позволяют посылать на экран неграфические управляющие символы. Например, управляющий символ \033 часто используется в качестве первого символа в команде управления терминалом или принтером. Некоторые управляющие последовательности зависят от устройств. Например, вертикальная табуляция и смена листа (\v и \f) никак не скажутся при выводе на экран, но произведут указанное действие на принтере.

В программах на С следует всегда представлять неграфические символы в виде управляющих последовательностей, т.к. их непосредственное использование может вызвать появление диагностических сообщений компилятора.

Символ обратного деления можно также использовать в качестве символа продолжения. Если символ новой строки непосредственно следует за знаком обратного деления, то компилятор игнорирует знак обратного деления и символ новой строки и рассматривает следующую строку текста, как часть предыдущей. Это особенно удобно для задания определений предпроцессора, которые могут занимать более одной строки. В прошлом эта особенность использовалась для создания строковых объектов, которые занимали более одной строки текста. Однако, теперь более предпочтительно использовать конкатенацию строк (см."Строковые литералы") для создания длинных строковых литералов.

Операторы

"Операторы" это символы (состоящие из одного символа или комбинации символов), которые задают манипуляции над значениями. Каждый символ интерпретируется как отдельный элемент, называемый "лексемой". (Определение лексем содержится в разделе "Лексемы".)

В Таблице 2.3 содержится список унарных операторов С с их именами. В Таблице 2.4 содержится список бинарных и тернарных операторов С с их именами. Операторы нужно задавать так, как они показаны в таблицах, без разделительных знаков в многосимвольных операторах. Обратите внимание на то, что три символа операторов (звездочка, знак минуса и амперсанд) появляются в двух таблицах. Их унарная или бинарная интерпретация зависит от контекста, в котором они появляются. Оператор sizeof не включен в эти таблицы. Это скорее ключевое слово (sizeof), чем символ, и поэтому приводится в разделе "Ключевые слова".

Таблица 2.3. "Унарные операторы"

Оператор Название ! логическое НЕ ~ битовое дополнение - арифметическое отрицание * индерекция & адресация + унарный плюс

Оператор унарного плюса выполняется синтаксически, а не семантически.

Таблица 2.4. "Бинарные и тернарные операторы"

Оператор Название + сложение - вычитание * умножение / деление % остаток << сдвиг влево >> сдвиг вправо <= меньше или равно > больше >= больше или равно == эквивалентно != неэквивалентность & битовое И | битовое включающее ИЛИ ^ битовое исключающее ИЛИ |= битовое присвоение включающего ИЛИ && логическое И || логическое ИЛИ , последовательное ?: условие ++ инкремент -- декремент = простое присвоение += присвоение со сложением -= присвоение с вычитанием *= присвоение с умножением /= присвоение с делением %= присвоение с остатком >>= присвоение со сдвигом вправо <<= присвоение со сдвигом влево &= присвоение с битовым И ^= присвоение с битовым исключающим ИЛИ

Оператор условия является тернарным, а не многосимвольным оператором. Условное выражение имеет вид: выражение?выражение:выражение.

Полное описание каждого оператора содержится в главе "Выражения и присвоения".

Константы

Константа это число, символ или строка символов, которая в программе используется, как значение. Значение константы нельзя изменить.

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

Целые константы

Синтаксис: цифры 0цифры 0xцифры 0Xцифры

"Целая константа" это десятичное, восьмеричное или шестнадцатеричное число, которое представляет собой целое значение в одной из следующих форм:

  • "Десятичная константа" имеет форму одной или нескольких цифр (от 0 до 9), первая из которых не ноль.
  • "Восьмеричная константа" имеет форму 0цифры, где цифры это одно или нескольких восьмеричных цифр (от 0 до 7), первая из которых ноль.
  • "Шестнадцатеричная константа" имеет форму 0xцифры или 0Xцифры, где цифры это одно или нескольких шестнадцатеричных цифр (от 0 до 9 и прописные или строчные буквы от a до f), указание 0x или 0X обязательно.

Нельзя разделять цифры в целых константах разделительными цифрами.

В Таблице 2.5 приведены примеры трех форм целых констант.

Таблица 2.5. Примеры целых констант Десятичные Восьмеричные Шестнадцатеричные 10 012 0xa или 0xA 132 0204 0x84 32179 076663 0x7db3 или 0x7DB3

Целые константы всегда имеют положительные значения. Если нужно использовать отрицательное значение, то поместите знак минус (-) перед константой для формирования выражения с отрицательным значением. (В данном случае знак минус интерпретируется как унарный арифметический оператор отрицания.)

Каждой целой константе на основании ее значения присваивается соответствующий тип. Тип константы определяет, какие преобразования будут выполнены при использовании константы в выражении или использовании знака минус (-). Можно сформулировать следующие правила:

  • Десятичные константы рассматриваются как величины со знаками и имеют тип int или long, если этого требует величина значения.
  • Восьмеричные и шестнадцатеричные константы в зависимости от размера имеют тип int, unsigned int, long или unsigned long. Если константа может быть представлена, как int, то ей присваивается тип int. Если она больше, чем может хранится в int, но она может быть представлена тем же числом бит, что и int, то ей присваивается тип unsigned int. Аналогично, если константа не размещается в unsigned int, то ей присваивается тип long, или unsigned long при необходимости.

В Таблице 2.6 показаны диапазоны значений соответствующих типов для восьмеричных и шестнадцатеричных констант для машины, в которой для типа int выделяется 16 бит.

Таблица 2.6. Типы, присваиваемые восьмеричным и шестнадцатеричным константам Шестнадцатеричные Восьмеричные Тип 0x0-0x7FFF 0-077777 int 0x8000-0xFFFF 0100000-0177777 unsigned int 0x10000-0x7FFFFFFF 0200000-017777777777 long 0x80000000-0xFFFFFFFF 020000000000-037777777777 unsigned long

Последовательность непосредственного ввода значений по Таблице 2.6 состоит в том, что шестнадцатеричные и восьмеричные константы всегда дополняются нулями при их преобразовании в в более емкий тип. (Дополнительная информация по преобразованию типа содержится в главе "Выражения и присвоения".

Можно форсировать целую константу в тип long, указав в конце букву l или L. В Таблице 2.7 показаны некоторые формы целых констант long.

Таблица 2.7. Примеры целых констант long Десятичные Восьмеричные Шестнадцатеричные 10L 012L 0xaL или 0xAL 79l 0115l 0x4fl или 0x4Fl

Типы описаны в главе "Объявления", а преобразования описаны в главе "Выражения и присвоения".

Наши рекомендации