Операционная система UNIX. Руководство программиста

     

Первичные выражения


В awk'е шаблоны и действия составляются из выражений. Первичные выражения - это основные "строительные блоки" для выражений; к первичным выражениям относятся:

  • числовые константы
  • текстовые константы
  • переменные
  • функции

Каждое выражение имеет как числовое, так и текстовое значение; одно из них обычно является предпочтительным. Правила, по которым определяется предпочтительное значение выражения, излагаются ниже.


Вызов функции есть первичное выражение, за которым следует заключенный в скобки список (возможно пустой) выражений, являющихся фактическими параметрами функции. Первичное выражение должно иметь тип "функция, возвращающая ...", а результат вызова функции имеет тип "...". Как поясняется ниже, не встретившийся до сих пор идентификатор, за которым следует левая скобка, неявно, исходя из контекста, описывается как функция, возвращающая целый результат.

Все фактические параметры типа float преобразуются перед вызовом к типу double. Все параметры типов char или unsigned long - к int. Имена массивов преобразуются в указатели. Никаких других преобразований автоматически не делается; в частности, компилятор не сравнивает типы фактических и формальных параметров. Если преобразование необходимо, его следует задать явно (см. Унарные операции, а также пункт Имена типов в разделе ОПИСАНИЯ).

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

Первичное выражение, за которым следует точка, а затем идентификатор, также является первичным. Первое выражение должно быть структурой или объединением, а идентификатор должен именовать элемент структуры или объединения. Значение выражения - названный элемент структуры или объединения; это л_значение, если первое выражение - л_значение.

Первичное выражение, за которым следует стрелка -> (составленная из знаков - и >), а затем идентификатор, также является первичным. Первое выражение должно быть указателем на структуру или объединение, а идентификатор должен именовать элемент этой структуры или объединения. Значение выражения - л_значение, обозначающее названный элемент указуемой структуры или объединения. Таким образом, выражение E1->MOS - то же самое, что и (*E1).MOS. Структуры и объединения обсуждаются в пункте Описания структур и объединений раздела ОПИСАНИЯ.




Содержание раздела