чуть-чуть variable already defined

 

Может с обновлениями прилетело, или просто не обращал внимания,

но (по крайней мере) 4-ка стала плохо определять scope (область видимости переменных)

на вот такие конструкции компилятор странно себя ведёт:

/// sample.mqh
/// при компиляции (проверке кода) mqh будет ошибка
int foo(int arg) {
  if (arg==CONST1) {
     int var=1;
     ....
  } else if (arg==CONST2) {
     int var=2; // !! var already defined
     ....
  }
  return 0;
}

а вот если этот mqh задействовать (include) то ошибки уже не будет

/// sample.mq4
// задействуем mqh на которой компилятор ругался
// и о чудо ! ошибок нет
#include "sample.mqh"

void OnTick() {
   if ( foo( (int)TimeCurrent() ) ) {
     // даже если вызовем функцию в которой "ошибка"
     ...
   }
} 

просто примите к сведению - не всякая ошибка является ошибкой :-)

 
#property strict
 
Maxim Kuznetsov:

Может с обновлениями прилетело, или просто не обращал внимания,

но (по крайней мере) 4-ка стала плохо определять scope (область видимости переменных)

на вот такие конструкции компилятор странно себя ведёт:

#property strict в обоих случаях?

 
fxsaber:

а и действительно :-)

в mq4 оно есть, а в каждый отдельный mqh я его не пихал