Skip to content

Введение

Функция это независимый набор объявлений и операторов, который обычно разрабатывается для выполнения конкретной задачи. В определении функции задается ее имя и число ее формальных параметров и приводятся объявления и операторы, которые задают ее действие. Эти объявления и операторы называются "телом функции". Определение функции может не содержать ее тела, а указывать на то, что функция находится в DLL и должна быть загружена из указанного файла в момент обращения к ней. Объявления формальных параметров задают имена для формальных параметров. Сфера действия этих имен заканчивается в конце функции. При вызове функции управление выполнением программы передается на вызванную функцию. Действительные аргументы, если они есть, передают свои значения вызванной функции. Выполнение оператора return в вызванной функции возвращает управление и возможное возвращаемое значение на вызов функции.

c
/* Объявление и определение функции */

ФУНКЦИЯ СложениеСтрок ( a, b )

{

    IF ( ТИП( "a" ) != "C" OR ТИП( "a" ) != "C" ) RETURN "";

    RETURN a + b;

}

Определения функций

Синтаксис:

c
FUNCTION [LOCAL | ЛОКАЛЬНАЯ] ИмяФункции([ИмяПараметра1[, ИмяПараметра2[,...]]])`
{
    блок команд;
}

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

Вызовы функций

Синтаксис: выражение([список-выражений])

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

  1. Вычисляются выражения из списка выражений и преобразуются по правилам обычных арифметических преобразований.
  2. Выражения из списка выражений передаются в формальные параметры вызванной функции. Первое выражение списка всегда соответствует первому формальному параметру функции, второе выражение соответствует второму формальному параметру, и т.д. по списку. Вызванная функция использует копии действительных аргументов, поэтому все изменения, которые она сделает с аргументами, не повлияют на значения переменных, с которых были сделаны копии.
  3. Управление выполнением передается на первый оператор функции.
  4. Выполнение оператора RETURN в теле функции возвращает управление и возвращаемое значение, если оно есть, на вызов функции. Если оператор RETURN не выполняется, то управление передается на вызов после выполнения последнего оператора вызванной функции. В этом случае возвращаемое значение является логическим и равно ИСТИНЕ.

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

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