Язык программирования C

Скачать в pdf «Язык программирования C»


список-описателей-структуры: описатель-структуры


список-описателей-структуры , описатель-структуры


Обычно описатель-структуры является просто описателем элемента структуры или объединения. Элемент структуры может также состоять из заданного количества битов. Такой элемент называется битовым полем или просто полем. Его длина отделяется от имени поля двоеточием.


описа тель — структуры: описатель


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


Спецификатор типа, имеющий приведенную ниже форму, объявляет указанный идентификатор меткой (tag) структуры или объединения, задаваемой списком элементов: struct-или-union идентификатор { список-объявлений-структуры }


Последующее объявление в той же или вложенной области действия может ссылаться на тот же тип, используя в спецификаторе только метку без списка: struct-или-union идентификатор;


Если спецификатор с меткой, но без списка фигурирует там, где его метка не объявлена, создается неполный тип. Объекты неполного структурного типа могут упоминаться в контексте, где не требуется знать их размер, — например, в объявлениях (но не определениях) для описания указателя или создания нового типа с помощью typedef, но никаким иным образом. Тип становится полным при появлении последующего спецификатора с этой меткой, содержащего также список объявлений. Даже в спецификаторах со списком объявляемый тип структуры или объединения является неполным внутри списка и становится завершенным только после появления символа }, заканчивающего спецификатор.


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


В отношении объявлений следующего вида действует особое правило: struct-или-union идентификатор;


Это объявление создает структурный тип, но не содержит списка объявлений и описателя. Даже если идентификатор является меткой структуры или объединения, уже объявленной во внешней области действия (раздел А.11.1), такое объявление делает его меткой структуры или объединения нового, неполного типа в текущей области действия.

Скачать в pdf «Язык программирования C»