Объявление тега
Объявление типа структуры, объединения или перечислимого
типа имеет такую же синтаксическую форму, как и объявление переменной этих
типов, однако в объявлении типа идентификатор переменной (а в общем случае
описатель) опущен. Именем типа структуры, объединения или перечислимого типа
является тег. Тег – идентификатор, именующий структуру, которая объявляется
списком объявления элементов. Описание специфицирует либо переменную типа struct, либо массив, либо указатель на
структуру данного типа, либо объект, являющийся комбинацией вышеперечисленного.
Например:
struct [<тег>] {<список-объявлений-элементов>} <описатель>
[,<описатель>:];
Объявления typedef
Синтаксис: typedef
<спецификация типа> <описатель> [,<описатель>:];
Объявление
typedef синтаксически аналогично объявлению переменной или функции, за
исключением того, что вместо спецификации класса памяти записывается ключевое
слово typedef и отсутствует инициализатор. Объявление typedef
интерпретируется таким же образом, как объявление переменной или функции,
однако идентификатор, входящий в состав описателя, специфицирует не переменную
или функцию, а тип. Идентификатор становится синонимом для объявленного типа и
может употребляться в последующих объявлениях. Другими словами, создаются не
новые типы, а имена для специфицированных программистом типов. С помощью typedef
может быть объявлено имя для любого типа, как базового, так и составного -
указателя, функции, массива. Принято записывать идентификаторы типов,
объявленные посредством typedef, прописными буквами, однако это не
является требованием языка.
Абстрактные имена типов
Иногда
возникает необходимость специфицировать некоторый тип данных без присвоения ему
идентификатора и без объявления какого-либо объекта. Такая конструкция,
определяющая тип без имени, называется абстрактным именем типа. Абстрактные
имена типов используются в трех контекстах: в списках типов аргументов при
объявлении функций, в операции приведения типа и в операции sizeof. Абстрактными
именами для базовых, перечислимых, структурных типов и объединений являются
просто соответствующие им спецификации типа. Абстрактные имена для типов
указатель, массив и функция задаются следующей синтаксической конструкцией:
<спецификация
типа> <абстрактный
описатель>
Абстрактный
описатель отличается от обычного описателя только тем, что он не содержит
идентификатора. Как и обычный описатель, он может содержать один или более
признаков указателя, массива и функции.
(int * - абстрактное имя для указателя на
тип int, int (*) [5] – на
массив из пяти элементов типа int, int (*) (void) – на
функцию, не требующую аргументов и возвращающую значение типа int).
|