Чтение онлайн

ЖАНРЫ

Язык программирования Си. Издание 3-е, исправленное

Ритчи Деннис М.

Шрифт:

• С некоторых пор доступен тип unsigned char. Стандарт вводит ключевое слово signed для явного указания, что объект типа char или другого целочисленного типа имеет знак.

• Уже несколько лет в большинстве реализаций доступен тип void. Стандарт вводит void * в качестве типа обобщенного указателя; раньше для этой цели использовали char *. Одновременно вступают в силу правила, по которым запрещается без преобразования типа "смешивать" указатели и целые или указатели разных

типов.

• Стандарт устанавливает минимальные пределы диапазонов арифметических типов, предусматривает заголовочные файлы <limits.h> и <float.h>, в которых помещаются эти характеристики для каждой конкретной реализации.

• Перечисление– новый тип, которого не было в первой редакции.

• Стандарт заимствует из C++ способ записи квалификатора типа, в частности квалификатора const (A8.2).

• Вводится запрет на модификацию строк: это значит, что их разрешается размещать в памяти, доступной только на чтение (ПЗУ).

• Изменены "обычные арифметические преобразования"; по существу, выполнен переход от принципа "для целых всегда превалирует unsigned; для плавающей точки всегда используется double" к принципу "повышение до минимального достаточно вместительного типа" (см. A6.5).

• Отменены старые операторы присваивания вроде =+. Каждый оператор присваивания теперь представляется одной отдельной лексемой. В первом издании оператор присваивания мог изображаться парой символов, возможно, разделенных символами-разделителями.

• Компиляторам более не разрешается трактовать математическую ассоциативность операторов как вычислительную ассоциативность.

• Введен унарный оператор + для симметрии с унарным .

• Разрешено использовать указатель на функцию в качестве ее именующего выражения без явного оператора * (см. A7.3.2).

• Структурами разрешено оперировать при присваиваниях, можно передавать структуры в качестве аргументов функциям и получать их в качестве результата от функций.

• Разрешено применять оператор получения адреса & к массиву; результатом является указатель на массив.

• В первой редакции результат операции sizeof имел тип int; во многих реализациях он заменен на unsigned. Стандарт официально объявляет его зависимым от реализации, но требует, чтобы он был определен в заголовочном файле <stddef.h> под именем size_t. Аналогичное изменение было сделано в отношении типа разности указателей) который теперь выступает под именем ptrdiff_t (см. A7.4.8 и A7.7).

• Запрещено применять оператор получения адреса & к объекту типа register даже тогда, когда данный компилятор не располагает его на регистре.

• Типом результата операции сдвига является тип ее левого операнда; тип правого операнда на повышение типа результата влияния не оказывает (см. A7.8).

• Стандарт разрешает адресоваться с помощью

указателей на место, лежащее сразу за последним элементом массива, и позволяет оперировать с такими указателями, как с обычными, см. A7.7.

• Стандарт вводит (заимствованный из C++) способ записи прототипа функции с включением в него типов параметров и явного указания о возможности их изменения и формализует метод работы с переменным списком аргументов. (см. A7.3.2, A8.6.3, B7.) С некоторыми ограничениями доступен и старый способ записи.

• Стандартом запрещены пустые объявления, т. е. такие, в которых нет объявителей и не объявляется ни одной структуры, объединения или перечисления. Однако объявление с одним тегом структуры (или объединения) переобъявит ее даже в том случае, если она была объявлена во внешней области действия.

• Запрещены объявления внешних данных, не имеющие спецификаторов и квалификаторов (т. е. объявления с одним "голым" объявителем).

• В некоторых реализациях, когда extern– объявление расположено во внутреннем блоке, его область видимости распространяется на остальную часть файла. Стандарт вносит ясность в эту ситуацию и объявляет, что область видимости такого объявления ограничена блоком.

• Область видимости параметров "вставляется" в составную инструкцию, представляющую собой тело функции, так что объявления на верхнем уровне функции не могут их "затенить".

• Несколько изменены именные пространства идентификаторов. Всем тегам структур, объединений и перечислений стандарт выделяет одно именное пространство; для меток инструкций вводится отдельное именное пространство (см. A11.1). Кроме того, имена элементов связаны со структурой или объединением, частью которого они являются. (С некоторых пор это общепринятая практика.)

• Допускается инициализация объединения; инициализатор относится к первому элементу объединения.

• Разрешается инициализация автоматических структур, объединений и массивов, хотя и с некоторыми ограничениями.

• Разрешается инициализация массива символов с помощью строкового литерала по точному количеству указанных символов (без '\0').

• Управляющее выражение и case– метки в switch могут иметь любой целочисленный тип.

Предметный указатель

0... константа восьмеричная 2.3, A2.5.1

0x... константа шестнадцатеричная 2.3, A2.5.1

... многоточие 7.3, A7.3.2

>= оператор больше или равно 2.6, A7.9

> оператор больше чем 2.6, A7.9

оператор вычитания 2.5, A7.7

– - оператор декремента 1.5.2, 2.8, 5.5, A7.3.4, A7.4.1

/ оператор деления 1.2, 2.5, A7.6

% оператор деления по модулю 2.5, A7.6

. оператор доступа к элементу структуры 6.1, A7.3, A7.3.3

– > оператор доступа к элементу структуры через указатель 6.2, A7.3, A7.3.3

Поделиться с друзьями: