== !=
&
\^
\!
&&
\!\!
?:
Все операции присваивания имеют одинаковый приоритет и груп-
пируются справа налево.
Операции присваивания:
= += -= *= ?= %= >>= <<= &= \^= \!=
Операция запятая имеет самый низкий приоритет и группируется
слева направо.
26.2. Описания
Описание:
спецификаторы-описания список-инициализируемых-описателей
необ;
---------------------------------------------------------------------------
спецификаторы-описания:
спецификатор-типа спецификаторы-описания
необ
спецификатор-класса-памяти спецификаторы-описания
необ
спецификатор-класса-памяти:
AUTO
STATIC
EXTERN
REGISTER
TYPEDEF
спецификатор-типа:
CHAR
SHORT
INT
LONG
UNSIGNED
FLOAT
DOUBLE
спецификатор-структуры-или-объединения
определяющее-тип-имя
список-инициализируемых-описателей:
инициализируемый-описатель
инициализируемый-описатель,
список-инициализируемых-описателей
инициализируемый-описатель
описатель-инициализатор
необ
описатель:
идентификатор
(описатель)
* описатель
описатель ()
описатель [константное выражение
необ]
спецификатор-структуры-или-объединения:
STRUCT список-описателей-структуры
STRUCT идентификатор \(список-описаний-структуры\)
STRUCT идентификатор
UNION \(список-описаний-структуры\)
UNION идентификатор \(список-описаний-структуры\)
UNION идентификатор
список-описаний-структцры:
описание-структуры
описание-структуры список-описаний-структуры
описание структуры:
спецификатор-типа список-описателей-структуры:
список-описателей-структуры
описатель-структуры
описатель-структуры,список-описателей-структуры
описатель-структуры:
описатель
описатель: константное выражение
:константное-выражение
инициализатор:
= выражение
= \(список-инициализатора\)
= \(список-инициализатора\)
список инициализатора:
выражение
список-инициализатора,список-инициализатора
\(список-инициализатора\)
имя-типа:
спецификатор-типа абстрактный-описатель
абстрактный-описатель:
пусто
\(абстрактный-описатель\)
* абстрактный-описатель
абстрактный-описатель ()
абстрактный-описатель [константное-выражение
необ]
определяющее-тип-имя:
идентификатор
26.3. Операторы
составной-оператор:
\(список-описаний список-операторов
необ необ\)
список-описаний:
описание
описание список-описаний
список-операторов:
оператор
оператор список-операторов
оператор:
составной оператор
выражение;
IF (выражение) оператор
IF (выражение) оператор ELSE оператор
WHILE (выражение) оператор
DO оператор WHILE (выражение);
FOR(выражение-1 ;выражение-2 ;выражение-3 )
необ необ необ
оператор
SWITCH (выражение) оператор
CASE константное-выражение : оператор
DEFAULT: оператор
BREAK;
CONTINUE;
RETURN;
RETURN выражение;
GOTO идентификатор;
идентификатор : оператор
;
26.4. Внешние определения
Программа:
внешнее-определение
внешнее-определение программа
внешнее-определение:
определение-функции
определение-данных
определение-функции:
спецификатор-типа описатель-функции тело-функции
необ
описатель-функции:
описатель (список-параметров )
необ
список-параметров:
идетификатор
идентификатор , список-параметров
тело-функции:
список-описаний-типа оператор-функции
оператор-функции:
\(список описаний список-операторов\)
необ
определение данных:
EXTERN спецификатор типа список
необ необ
инициализируемых описателей ;
необ
STATIC спецификатор типа список
необ необ
инициализируемых описателей
необ;
26.5. Препроцессор
#DEFINE идентификатор строка-лексем
#DEFINE
#DEFINE идентификатор(идентификатор,...,идентификатор)стр
#UNDEF идентификатор
#INCLUDE "имя-файла"
#INCLUDE <имя-файла>
#IF константное-выражение
#IFDEF идентификатор
#IFNDEF идентификатор
#ELSE
#ENDIF
#LINE константа идентификатор
Последние изменения языка "C" (15 ноября 1978 г.)
27. Присваивание структуры
Структуры могут быть присвоены, переданы функциям в ка-
честве аргументов и возвращены функциям. Типы участвующих
операндов должны оставаться теми же самыми. Другие правдопо-
добные операторы, такие как сравнение на равенство, не были
реализованы.
В реализации возвращения структур функциями на PDP-11
имеется коварный дефект: если во время возврата происходит
прерывание и та же самая функция пеентерабельно вызывается
во время этого прерывания, то значение возвращаемое из пер-
вого вызова, может быть испорчено. Эта трудность может воз-
никнуть только при наличии истинного прерывания, как из опе-
рационной системы, так и из программы пользователя, прерыва-
ния, которое существенно для использования сигналов; обычные
рекурсивные вызовы совершенно безопасны.
28. Тип перечисления
Введен новый тип данных,аналогичный скалярным типам язы-
ка паскаль. К спецификатору-типа в его синтаксическом описа-
нии в разделе 8.2. Приложения а следует добавить
спецификатор-перечисления
-------------------------
с синтаксисом
пецификатор-перечисления:
---------------------------------------------------------------------------
ENUM список-перечисления
-------------------
ENUM идентификатор список-перечисления
------------- -------------------
ENUM идентификатор
-------------
cписок-перечисления:
---------------------------------------------------------------------------
перечисляемое
---------------------------------------------------------------------------
список-перечисления, перечисляемое
------------------- -------------
перечисляемое:
---------------------------------------------------------------------------
идентификатор
-------------
идентификатор = константное выражение
------------- ---------------------
Роль идентификатора в спецификаторе-перечисления пол-
ностью аналогична роли ярлыка структуры в спецификато-
ре-структуры; идентификатор обозначает определенное перечис-
ление. Например, описание
ENUM COLOR \(RED, WHITE, BLACK, BLUE \);
. . .
ENUM COLOR *CP, COL;
Объявляет идентификатор COLOR ярлыком перечисления типа,
описывающего различные цвета и затем объявляет CP указателем
на объект этого типа, а COL - объектом этого типа.
Идентификаторы в списке-перечисления описываются как
константы и могут появиться там, где требуются (по контекс-
ту) константы. Если не используется вторая форма перечисляе-
мого (с равеством =), то величины констант начинаются с 0 и
возрастают на 1 в соответствии с прочтением их описания сле-
ва на право. Перечисляемое с присвоением = придает соответс-
твующему идентификатору указанную величину; последующие
идентификаторы продолжают прогрессию от приписанной величи-
ны.
Все ярлыки перечисления и константы могут быть различны-
ми и непохожими на ярлыки и члены структур даже при условии
использования одного и того же множества идентификаторов.
Объекты данного типа перечисления рассматриваются как
объекты, имеющие тип, отличный от любых типов и контролирую-
щая программа LINT сообщает об ошибках несоответствия типов.
В реализации на PDP-11 со всеми перечисляемыми переменными
оперируют так, как если бы они имели тип INT.
29. Таблица изображений непечатных символов языка "C".
В данной таблице приведены изображения некоторых симво-
лов (фигурные скобки и т.д.) языка "C", которых может не
оказаться в знаковом наборе дисплея или печатающего устройс-
тва.
---------------------------------------------------------------------------
! Значение ! Изображение ** !
! ! В тексте !
---------------------------------------------------------------------------
! Фигурная открывающаяся ! !
! Скобка ! \( !
! ! !
---------------------------------------------------------------------------
! Фигурная закрывающаяся ! !
! Скобка ! \) !
! ! !
---------------------------------------------------------------------------
! Вертикальная ! !
! Черта ! \! !
! ! !
---------------------------------------------------------------------------
! ! !
! Апостороф ! \' !
! ! !
---------------------------------------------------------------------------
! Волнистая ! !
! Черта ! \^ !
! ! !
---------------------------------------------------------------------------
** П_р_и_м_е_ч_а_н_и_е:
Изображения приведены для операционой системы UNIX. При
работе компилятора "C" под управлением любой другой операци-
онной системы, необходимо воспользоваться соответствующим
руководством для данной системы.