Баг компилятора: not actual parameters count for macro

 

Билд 1966, 64 бит.   Ошибка в макросах:

void F(int,int) {  }


#define M(a)  F(a, 0)

#define F(a)  M(a)


void OnInit()
{
  F(1);  // 'F' - not actual parameters count for macro
}

В C++ работает корректно.

 

Спасибо за сообщение.

В текущей версии MQL, развёртываемый макрос, не помечается как отсутствующий, отсюда данная ошибка и ограничение в глубину при развертывании макросов.

Т.е. по приведённому коду, при развёртывании макроса F, сам макрос F должен "притворится" необъявленным, тогда при развёртывании макроса M, F(a,0) окажется вызовом, а не макросом F (при чём развёртываемом рекурсивно)

Буду исправлять.

 

Ну с той же оперы примерно

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

pavlick_, 2018.12.05 05:00

#define M (a ? 1 : 0)

struct S {
   int a;
};

void OnStart()
{
   S s;
#define a s.a
   Alert(M);
}

Скомпилировать не удаётся, ошибки:
   'a' - too complex, simplify the macro    temp.mq5    24    10
   's' - struct member undefined    temp.mq5    24    10
   ...

Т.е. препроцессор,  видимо, пытается рекурсивно раскрыть a.


 

Исправления внесены.

Оба приведённых кода компилируются без ошибок.

Ограничил вложенность раскручиваемых макросов до 64 (в последней ревизии было 16, изначально 8).

Причина обращения: