Особенности языка mql5, тонкости и приёмы работы - страница 297

 
Andrei Iakovlev #:

удивительно, что этот макрос работает

Старая ошибка и странное поведение препроцессора MQL, в отличие от препроцессора языка C, который правильно удаляет все комментарии к коду перед расширением макроса.

Последовательность работы препроцессора языка C:
 
Andrei Iakovlev #:

Ааа, это оно, хорошо.

Я пришел к решению, только когда создал несколько макросов с разным количеством переменных:

Так что если я хочу быстро вывести 5 переменных, я делаю:

Если я хочу вывести 9 переменных, я комбинирую:

Поэтому я не знаю, как создать универсальный макрос для печати любого количества переменных с помощью макроса P(x), чтобы это было похоже на PR5, например.

Кажется, что невозможно создать такой макрос для работы с любым количеством переменных, как это делает функция Print

 
Andrei Iakovlev #:

кажется, что невозможно создать такой макрос для работы с любым количеством переменных, как это делает функция Print

Да, действительно, в отличие от препроцессора C, препроцессор MQL не поддерживает вариативные макросы, принимающие переменное количество аргументов, как #define PRINT(...).


Редактировать:
Для поддержки нескольких аргументов функции Print() можно использовать обходные решения, например, ранее опубликованную TOSTR().

https://www.mql5.com/en/forum/393227/page298#comment_56270175
 
amrali #:
Для поддержки нескольких аргументов в функции Print() можно использовать обходные решения, например, ранее опубликованную TOSTR().

Я уже сделал это здесь: https: //www.mql5.com/en/forum/393227/page298#comment_56271584

 
amrali #:
Да, действительно, в отличие от препроцессора C, препроцессор MQL не поддерживает вариативные макросы, принимающие переменное количество аргументов, как #define PRINT(...).


Редактировать:
Для поддержки нескольких аргументов функции Print() можно использовать обходные решения, например, ранее опубликованную TOSTR().

https://www.mql5.com/en/forum/393227/page298#comment_56270175

Оффтопик, но хочу поправить. Выделенное:


лучше писать "Добавлено". Так будет правильнее на русском.

Потому, что "Редактировать" - это не та форма глагола, которую тут верно было бы использовать.

Для общего развития ;)

 
Хорошо, спасибо, Артём. Теперь я понял, что автоперевод eng->rus может иногда изменять смысл.
 
amrali #:
Хорошо, спасибо, Артём. Теперь я понял, что автоперевод eng->rus может иногда изменять смысл.

Да. Ничто не совершенно) 

UPD: Тут смысл не теряется. Всё понятно, но выглядит "коряво". Ближе по смыслу было бы "Отредактировано:"

 

Недокументированный DEAL_TYPE: so compensation.

void OnStart()
{  
  const ulong Ticket = 786026654;
  
  if (HistoryDealSelect(Ticket))
    Print(EnumToString((ENUM_DEAL_TYPE)HistoryDealGetInteger(Ticket, DEAL_TYPE))); // ENUM_DEAL_TYPE::19
}
 
fxsaber #:

Недокументированный DEAL_TYPE: so compensation.

Это тип для того, что бы при сливе выводить счёт в ноль?

 

У какой-то переменной значение равно -1.

Какая проверка будет выполнена быстрее на проверку этого значения: < 0 или == -1?