Русский

Справочник MQL4 Основы языка Функции Вызов функции

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

Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции.

имя_функции (x1, x2,..., xn)

 

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

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

Примеры:

int start()
  {
   double some_array[4]={0.3, 1.4, 2.5, 3.6};
   double a=linfunc(some_array, 10.5, 8);
   //...
  }
double linfunc(double x[], double a, double b)
  {
   return (a*x[0] + b);
  }

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

Примеры:

void somefunc(double init,
              double sec=0.0001, //определены значения по умолчанию
              int level=10);  
//...
somefunc();                      // неправильный вызов. первый обязательный параметр должен быть.
somefunc(3.14);                  // правильный вызов
somefunc(3.14,0.0002);           // правильный вызов
somefunc(3.14,0.0002,10);        // правильный вызов

При вызове функции нельзя пропускать параметры, даже имеющие умолчательные значения:

somefunc(3.14, , 10);           // неправильный вызов -> второй параметр пропущен.

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

Смотри также

Перегрузка, Виртуальные функции, Полиморфизм