Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PYaVU_s.doc
Скачиваний:
44
Добавлен:
24.02.2016
Размер:
665.09 Кб
Скачать
    1. Имена типов

Имя типа специфицирует особенности типа данных. Имена типов используются в трех контекстах: в списках типов аргументов, при объявлении функций, в вычислениях cast (преобразованиях типов), и в sizeof операциях. Списки типов аргументов рассматривались в разделе 4.5 "Объявления функций". Преобразования cast и операция sizeof обсуждаются в разделах 5.7.2 и 5.3.4 соответственно. Именами для основных, перечисляющих, структурных и совмещающих типов являются спецификаторы типа для каждого из них. Имена для типов указателя, массива и функции задаются следующей синтаксической формой:

<type-specifier><abstract-declarator>

Абстрактный декларатор <abstract-declarator>- это декларатор без идентификатора, состоящий из одного или более модификаторов указателей, массивов и функций. Модификатор указателя (*) всегда появляется перед идентификатором в деклараторе, в то время как модификатор массива ([]) или функции ( () ) появляются после идентификатора. Таким образом, чтобы правильно интерпретировать абстрактный декларатор, нужно начинать интерпретацию с подразумеваемого идентификатора.

Абстрактные деклараторы могут быть составными. Скобки в составном абстрактном деклараторе специфицируют порядок интерпретации, подобно тому как это делается при интерпретации составных деклараторов объявлений. Абстрактный декларатор, состоящий из пустых круглых скобок () не допускается, поскольку это двусмысленно. В этом случае невозможно определить находится ли подразумеваемый идентификатор внутри скобок, и в таком случае- это немодифицированный тип, или перед скобками, тогда- это тип функции. Спецификаторы типа, установленные посредством объявлений typedef, также рассматриваются как имена типов.

Примеры:

long * /* Example 1 */

int (*) [5] /* Example 2 */

int (*) (void) /* Example 3 */

В первом примере задано имя типа как указатель на тип long.

Во втором и третьем примерах показано каким образом скобки модифицируют составные абстрактные деклараторы. В примере 2 задано имя типа для указателя на массив иэ пяти злементов. В третьем примере именуется указатель на функцию, не требующую аргументов и возвращающую значение типа int.

  1. Выражения и присваивания

    1. Введение

В этом разделе описывается каким образом составлять выражения и осуществлять присваивания в языке Си.

Выражение – это комбинация операндов и операций, значением которой является отдельная величина. Операнд- это константная или переменная величина. Каждый операнд выражения- это также выражение, представляющее отдельную величину. Операции определяют действия над операндами.

В Си присваиваются значения выражений. Помимо простого присваивания посредством операции "=",Си поддерживает составные операции присваивания, которые перед присваиванием выполняют дополнительные операции над своими операндами. Окончательное значение результата зависит от старшинства операций и от побочных эффектов, если они возникают. Порядок вычисления устанавливается определенным группированием операндов и операций в выражении. Побочный эффект- это изменения состояния машины, вызванные в процессе вычисления выражения.

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

Величина, представляемая каждым операндом в выражении, имеет тип, который может быть преобразован к другим типам в определенном контексте. Преобразования типов имеют место в присваиваниях, cast операциях, вызовах функций и при выполнении операций.