Вопрос возник при чтении книги "ЯЗЫК ПРОГРАММИРОВАНИЯ C".
(Оффтоп)
А.8.8. Имена типов В ряде контекстов (например, при явном приведении к типу, при указании типов параметров в объявлениях функций, в аргументе операции sizeof) возникает потребность в применении имени типа данных. Эта потребность реализуется с помощью имени типа, определение которого синтаксически почти совпадает с объявлением объекта того же типа, в котором только опущено имя объекта.
имя-типа:
список-спецификаторов-модификаторов абстрактный-описательнеоб
абстрактный-описатель:
указатель
указательнеоб собственно-абстрактный-описатель
собственно-абстрактный-описатель:
( абстрактный-описатель )
собственно-абстрактный-описательнеоб [ константное-выражениенеоб ]
собственно-абстрактный-описательнеоб ( список-типов-параметровнеоб )Можно указать ровно одно место в абстрактном описателе, где мог бы находиться идентификатор, если бы данная конструкция была описателем в полноценном объявлении объекта. Именованный тип совпадает с типом этого предполагаемого идентификатора. Вот примеры:
Код:
int
int *
int * [3]
int (*) []
int *()
int (* [] ) (void)
Здесь объявляются соответственно типы "целое число" (int), "указатель на int", "массив из трех указателей на int", "указатель на массив из неизвестного количества элементов типа int", "функция неизвестного количества параметров, возвращающая указатель на int", "массив неизвестного размера, состоящий из указателей на функции без параметров, каждая из которых возвращает int".