28. Последние изменения языка 'C'
(15 ноября 1978 г.)

Содержание

28.1. Присваивание структуры
28.1. Тип перечисления


28.1. Присваивание структуры

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

В реализации возвращения структур функциями на pdp-11 имеется коварный дефект: если во время возврата происходит прерывание и та же самая функция реентерабельно вызывается во время этого прерывания, то значение возвращаемое из первого вызова, может быть испорчено. Эта трудность может возникнуть только при наличии истинного прерывания, как из операционной системы, так и из программы пользователя, прерывания, которое существенно для использования сигналов; обычные рекурсивные вызовы совершенно безопасны.


28.2. Тип перечисления

Введен новый тип данных, аналогичный скалярным типам языка паскаль. К спецификатору-типа в его синтаксическом описании в разделе 17.2. Следует добавить:

спецификатор-перечисления
с синтаксисом

Спецификатор-перечисления:
enum список-перечисления
enum идентификатор список-перечисления
enum идентификатор

Список-перечисления:
перечисляемое
список-перечисления, перечисляемое

Перечисляемое:
идентификатор
идентификатор = константное выражение

Роль идентификатора в спецификаторe-перечисления полностью аналогична роли ярлыка структуры в спецификаторe-структуры; идентификатор обозначает определенное перечисление. Например, описание


 enum color {red, white, black, blue };
 . . .
 enum color *ср, col;
об'являет идентификатор color ярлыком перечисления типа, описывающего различные цвета и затем об'являет ср указателем на об'ект этого типа, а col - об'ектом этого типа.

Идентификаторы в спискe-перечисления описываются как константы и могут появиться там, где требуются (по контексту) константы. Если не используется вторая форма перечисляемого (с равеством =), то величины констант начинаются с 0 и возрастают на 1 в соответствии с прочтением их описания слева на право. Перечисляемое с присвоением = придает соответствующему идентификатору указанную величину; последующие идентификаторы продолжают прогрессию от приписанной величины.

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

Об'екты данного типа перечисления рассматриваются как об'екты, имеющие тип, отличный от любых типов и контролирующая программа lint сообщает об ошибках несоответствия типов. В реализации на pdp-11 со всеми перечисляемыми переменными оперируют так, как если бы они имели тип int.