Скачать MetaTrader 5
Справочник MQL5Основы языкаПеременныеСтатические переменные 

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

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

Пример:

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

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

Статические переменные существуют с момента выполнения программы и инициализируются однократно перед вызовом специализированной функции OnInit(). Если начальные значения не указаны, то переменные статического класса памяти принимают нулевые начальные значения.

Локальные переменные, объявленные с ключевым словом 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);
  }

Смотри также

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