Язык С


         

Описание структур и объединений


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

структура-или-объединение \( список-описаний-структуры\)

идентификатор структуры-или-объединения \(список-описаний-структуры\) идентификатор структуры-или-объединения

Структура-или-объединение:

STRUCT UNION

Список-описаний-структуры является последовательностью опи- саний членов структуры или объединения:

Список-описаний-структуры: описание-структуры описание-структуры список-описаний-структуры описание-структуры: спецификатор-типа список-описателей-структуры список-описателей-структуры: описатель-структуры описатель-структуры, список-описателей-структуры

В обычном случае описатель структуры является просто описа- телем члена структуры или объединения. Член структуры может также состоять из специфицированного числа битов. Такой член называется также полем; его длина отделяется от имени поля двоеточием.

Описатель-структуры: описатель описатель: константное выражение : константное выражение

Внутри структуры описанные в ней объекты имеют адреса, кото- рые увеличиваются в соответствии с чтением их описаний слева направо. Каждый член структуры, который не является полем, начинается с адресной границы, соответствующей его типу; следовательно в структуре могут оказаться неименованные ды- ры. Члены, являющиеся полями, помещаются в машинные целые; они не перекрывают границы слова. Поле, которое не умещается в оставшемся в данном слове пространстве, помещается в сле- дующее слово. Поля выделяются справа налево на PDP-11 и сле- ва направо на других машинах. Описатель структуры, который не содержит описателя, а только двоеточие и ширину, указывает неименованное поле, по- лезное для заполнения свободного пространства с целью соот- ветствия задаваемых извне схемам. Специальный случай неиме- нованного поля с шириной 0 используется для указания о вы- равнивании следующего поля на границу слова. При этом пред- полагается, что "следующее поле" действиетльно является по- лем, а не обычным членом структуры, поскольку в последнем случае выравнивание осуществляется автоматически. Сам язык не накладывает ограничений на типы объектов, описанных как поля, но от реализаций не требуется обеспечи- вать что-либо отличное от целых полей. Более того, даже поля типа INT могут рассматриваться как неимеющие знака. На PDP-11 поля не имеют знака и могут принимать только целые значения. Во всех реализациях отсутствуют массивы полей и к полям не применима операция взятия адреса &, так что не су- ществует и указателей на поля. Объединение можно представить себе как структуру, все члены которой начинаются со смещения 0 и размер которой дос- таточен, чтобы содержать любой из ее членов. В каждый момент объединение может содержать не более одного из своих членов. Спецификатор структуры или объединения во второй форме, т.е. Один из



Содержание  Назад  Вперед