Тип перечисления
Введен новый тип данных,аналогичный скалярным типам языка паскаль. К спецификатору-типа в его синтаксическом описании в начале лекции следует добавить
спецификатор-перечисления -------------------------
с синтаксисом
пецификатор-перечисления: ------------------------- enum список-перечисления ------------------- enum идентификатор список-перечисления ------------- ------------------- enum идентификатор ------------- cписок-перечисления: ------------------- перечисляемое ------------- список-перечисления, перечисляемое ------------------- ------------- перечисляемое: -------------- идентификатор ------------- идентификатор = константное выражение ------------- ---------------------
Роль идентификатора в спецификаторе-перечисления полностью аналогична роли ярлыка структуры в спецификаторе-структуры; идентификатор обозначает определенное перечисление. Например, описание
enum color {red, white, black, blue}; . . . enum color *cp, col;
Объявляет идентификатор color ярлыком перечисления типа, описывающего различные цвета и затем объявляет cp указателем на объект этого типа, а col - объектом этого типа.
Идентификаторы в списке-перечисления описываются как константы и могут появиться там, где требуются (по контексту) константы. Если не используется вторая форма перечисляемого (с равеством =), то величины констант начинаются с 0 и возрастают на 1 в соответствии с прочтением их описания слева на право. Перечисляемое с присвоением = придает соответствующему идентификатору указанную величину; последующие идентификаторы продолжают прогрессию от приписанной величины.
Все ярлыки перечисления и константы могут быть различными и непохожими на ярлыки и члены структур даже при условии использования одного и того же множества идентификаторов.
Объекты данного типа перечисления рассматриваются как объекты, имеющие тип, отличный от любых типов и контролирующая программа lint сообщает об ошибках несоответствия типов. В реализации на PDP-11 со всеми перечисляемыми переменными оперируют так, как если бы они имели тип INT.