Kernighan, B. W. and Ritchie, D. M. "The 'C' Programming Language"; Chapter 28

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.