internal error при компиляции

 

Как и наверное многие, я использую вместо библиотек include. При этом после редактирования я не сохраняю их, а компилирую - чтобы сразу проверить ошибки. Естественно, раз это не законченный программный код, там бывают и "плановые" ошибки, например вызовы не описанных в данном коде функций. Это всё я к тому, что пришёл к данной ошибке "естественным" путём а не из любви к приключениям :)

Так вот, оказалось, что если имеется вызов такой "не описанной" функции во вложенном if ... else то попытка использовать после этого оператор switch приводит к сообщению компилятора об ошибке internal error.

Например для тестового файла

//+------------------------------------------------------------------+
//|                                                InternalError.mqh |
//+------------------------------------------------------------------+

void func1() {
  if (true) {
    int j = 0;
  } else {
    if (true) test();
    else IError();
  }
  return;
}

int test() {
  switch(1) {
    case 1: break;
  }
  return(0);
}

компилятор даст два сообщения

'IError' - function is not defined      ...\experts\include\InternalError .mqh (10, 10)
'1' - internal error                    ...\experts\include\InternalError .mqh (16, 10)

Само по себе это не проблема, полная сборка компилируется без ошибок. Но не есть ли это признак каких-то проблем у компилятора при обработке вложенных if ... else ?

Это наблюдалось в 225 и в 226 билдах, более древние не проверял.

 
MetaQuotes Language 4 compiler version 4.00 build 224 (14 May 2009)
Copyright 2001-2009, MetaQuotes Software Corp.

2;124;C:\Program Files\SIGTrader\experts\scripts\#2.mq4;18:10;'IError' - function is not defined

2;135;C:\Program Files\SIGTrader\experts\scripts\#2.mq4;24:10;'1' - internal error