Компилятор: Initialization a variable is skipped by 'case' label

 

Наткнулся вот на такую штуку:

int p = 0;
switch (p)
{
   case 0:
      MqlDateTime mdt;
      TimeCurrent(mdt);
      break;
}

'MqlDateTime' - initialization a variable is skipped by 'case' label

'mdt' - undeclared identifier TestPassStr.mq5

'mdt' - parameter conversion is not allowed

Если выношу MqlDateTime mdt; за блок switch - работает
 

Нельзя. Так как по свитчу можно попасть на более низкий кейс, в котором будет обращение к этой переменной. Используйте составной оператор {}

int p = 0;
switch (p)
{
   case 0:
      {
         MqlDateTime mdt;
         TimeCurrent(mdt);
      }
      break;
}
 

Точно также через { } и в C++ работает определение локальных переменных внутри блока case.

 
Спасибо за объяснение! Буду знать 
 
Renat:

Точно также через { } и в C++ работает определение локальных переменных внутри блока case.

Однако, в С++ сия конструкция допустима и без использования { }, если ниже нет case/default.
То есть, аналог приведённого выше примера будет работать на C++ в отличие от MQL5.
Причина обращения: