Язык программирования Си. Издание 3-е, исправленное
Шрифт:
Можно указать одно-единственное место в абстрактном объявителе, где мог бы оказаться идентификатор, если бы данная конструкция была полноценным объявителем. Именованный тип совпадает
соответственно обозначают типы int, "указатель на int", "массив из трех указателей на int", "указатель на массив из неизвестного количества int", "функция неизвестного количества параметров, возвращающая указатель на int", "массив неизвестного количества указателей на функции без параметров, каждая из которых возвращает int".
А8.9. Объявление typedef
Объявления, в которых спецификатор класса памяти есть typedef, не объявляют объектов - они определяют идентификаторы, представляющие собой имена типов. Эти идентификаторы называются typedef– именами.
Объявление typedef приписывает тип каждому имени своего объявителя обычным способом (см. A8.6.). С этого момента typedef– имя синтаксически эквивалентно ключевому слову спецификатора типа, обозначающему связанный с ним тип. Например, после
допустимы следующие объявления:
b принадлежит типу long, bp– типу "указатель на long"; z– это структура заданного вида, a zp– принадлежит типу "указатель на такую структуру".
Объявление typedef не вводит новых типов, оно только дает имена типам, которые могли бы быть специфицированы и другим способом. Например, b имеет тот же тип, что и любой другой объект типа long.
typedef– имена могут быть перекрыты другими определениями во внутренней области видимости, но при условии, что в них присутствует указание типа. Например
не переобъявляет Blockno, а вот
переобъявляет.
A8.10. Эквивалентность типов
Два списка спецификаторов типа эквивалентны,
Два типа считаются совпадающими, если их абстрактные объявители (A8.8) после замены всех typedef– имен их типами и выбрасывания имен параметров функций составят эквивалентные списки спецификаторов типов. При сравнении учитываются размеры массивов и типы параметров функция.
A9. Инструкции
За исключением оговоренных случаев инструкции выполняются том порядке, как они написаны. Инструкции не имеют значений и выполняются, чтобы произвести определенные действия. Все виды инструкций можно разбить на несколько групп:
A9.1. Помеченные инструкции
Инструкции может предшествовать метка.
Метка, состоящая из идентификатора, одновременно служит и объявлением этого идентификатора. Единственное назначение идентификатора-метки - указать место перехода для goto. Областью видимости идентификатора-метки является текущая функция. Так как метки имеют свое собственное пространство имен, они не "конфликтуют" с другими идентификаторами и не могут быть перекрыты (см. A11.1.).
case– метки и default– метки используются в инструкции switch (A9.4). Константное выражение в case должно быть целочисленным.
Сами по себе метки не изменяют порядка вычислений.
A9.2. Инструкция-выражение
Наиболее употребительный вид инструкции - это инструкция-выражение.