Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
A8.8. Имена типов
В ряде случаев возникает потребность в применении имени типа данных (например при явном приведении к типу, в указании типов параметров внутри объявлений функций, в аргументе оператора sizeof). Эта потребность реализуется с помощью имени типа, определение которого синтаксически почти совпадает с объявлением объекта того же типа. Оно отличается от объявления лишь тем, что не содержит имени объекта. имя-типа: список-спецификаторов-квалификаторов абстрактный-объявительнеоб абстрактный-объявитель: указатель указательнеоб собственно-абстрактный-объявитель собственно-абстрактный-объявитель: (абстрактный-объявитель) собственно-абстрактный-объявительнеоб [ константное-выражениенеоб ] собственно-абстрактный-объявительнеоб (список-типов-параметровнеоб ) Можно указать одно-единственное место в абстрактном объявителе, где мог бы оказаться идентификатор, если бы данная конструкция была полноценным объявителем. Именованный тип совпадает с типом этого " невидимого идентификатора". Например intint *int *[3]int (*)[]int *()int (*[])(void) соответственно обозначают типы int, " указатель на int ", " массив из трех указателей на int ", " указатель на массив из неизвестного количества int ", " функция неизвестного количества параметров, возвращающая указатель на int ", " массив неизвестного количества указателей на функции без параметров, каждая из которых возвращает int ".
А8.9. Объявление typedef
Объявления, в которых спецификатор класса памяти есть typedef, не объявляют объектов - они определяют идентификаторы, представляющие собой имена типов. Эти идентификаторы называются typedef -именами. typedef-имя: идентификатор Объявление typedef приписывает тип каждому имени своего объявителя обычным способом (см. A8.6.). С этого момента typedef -имя синтаксически эквивалентно ключевому слову спецификатора типа, обозначающему связанный с ним тип. Например, после typedef long Blockno, *Blockptr; typedef struct { double r, theta; } Complex; допустимы следующие объявления: Blockno b; extern Blockptr bp; Complex z, *zp; b принадлежит типу long, bp - типу " указатель на long "; z - это структура заданного вида, a zp - принадлежит типу " указатель на такую структуру". Объявление typedef не вводит новых типов, оно только дает имена типам, которые могли бы быть специфицированы и другим способом. Например, b имеет тот же тип, что и любой другой объект типа long. typedef -имена могут быть перекрыты другими определениями во внутренней области видимости, но при условии, что в них присутствует указание типа. Например extern Blockno; не переобъявляет Blockno, а вот extern int Blockno; переобъявляет.
|