Kernighan, B. W. and Ritchie, D. M. "The 'C' Programming Language"; Chapter 28
28. Последние изменения языка 'C'
(15 ноября 1978 г.)
Содержание
28.1. Присваивание структуры
Структуры могут быть присвоены, переданы функциям в качествеаргументов и возвращены функциям. Типы участвующих операндов должныоставаться теми же самыми. Другие правдоподобные операторы, такие каксравнение на равенство, не были реализованы.
В реализации возвращения структур функциями на pdp-11 имеется коварныйдефект: если во время возврата происходит прерывание и та же самаяфункция реентерабельно вызывается во время этого прерывания, то значениевозвращаемое из первого вызова, может быть испорчено. Эта трудность можетвозникнуть только при наличии истинного прерывания, как из операционнойсистемы, так и из программы пользователя, прерывания, котороесущественно для использования сигналов; обычные рекурсивные вызовысовершенно безопасны.
28.2. Тип перечисления
Введен новый тип данных, аналогичный скалярным типам языка паскаль. Кспецификатору-типа в его синтаксическом описании вразделе 17.2.Следует добавить:
- спецификатор-перечисления
- Спецификатор-перечисления:
- enum список-перечисления
- enum идентификатор список-перечисления
- enum идентификатор
- enum идентификатор список-перечисления
- Список-перечисления:
- перечисляемое
- список-перечисления, перечисляемое
- Перечисляемое:
- идентификатор
- идентификатор = константное выражение
Роль идентификатора в спецификаторe-перечисления полностью аналогичнароли ярлыка структуры в спецификаторe-структуры; идентификаторобозначает определенное перечисление. Например, описание
enum color {red, white, black, blue }; . . . enum color *ср, col;об'являет идентификатор color ярлыком перечисления типа, описывающегоразличные цвета и затем об'являет ср указателем на об'ект этого типа,а col - об'ектом этого типа.
Идентификаторы в спискe-перечисления описываются как константы имогут появиться там, где требуются (по контексту) константы. Еслине используется вторая форма перечисляемого (с равеством =), товеличины констант начинаются с 0 и возрастают на 1 в соответствии спрочтением их описания слева на право. Перечисляемое с присвоением =придает соответствующему идентификатору указанную величину;последующие идентификаторы продолжают прогрессию от приписаннойвеличины.
Все ярлыки перечисления и константы могут быть различными и непохожимина ярлыки и члены структур даже при условии использования одного итого же множества идентификаторов.
Об'екты данного типа перечисления рассматриваются как об'екты,имеющие тип, отличный от любых типов и контролирующая программа lintсообщает об ошибках несоответствия типов. В реализации на pdp-11со всеми перечисляемыми переменными оперируют так, как если бы ониимели тип int.