Справочник MQL4

Статические переменные

Класс памяти static определяет статическую переменную. Модификатор static указывается перед типом данных.

Пример:

int somefunc()
  {
   static int flag=10;
   ...
   return(flag);
  }

Статическая переменная может быть проинициализирована соответствующей ее типу константой или константным выражением, в отличие от простой локальной переменной, которая может быть проинициализирована любым выражением.

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

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

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

Пример:

int Counter()
  {
   static int count;
   count++;
   if(count%100==0) Print("Функция Counter была вызвана уже ",count," раз");
   return count;
  }
void OnStart()
  {
//---
   int c=345;
   for(int i=0;i<1000;i++)
     {
      int c=Counter();
     }
   Print("c = ",c);
  }

Смотри также

Типы данных, Инкапсуляция и расширяемость типов, Инициализация переменных, Область видимости и время жизни переменных, Создание и уничтожение объектов, Статические члены класса