Обсуждение статьи "Использование утверждений (assertions) при разработке программ на MQL5" - страница 3

 

Если кто-то собирается использовать этот код, имейте в виду такой момент: следующий скрипт

   if(true)
      assert(1==1, "")
   else
      Print("Never executed");

приводит к выводу сообщения "Never executed" из ветки else.

Чтобы можно было использовать assert корректно, нужно исправить его, например в таком виде:

#define assert(condition, message) \
       do if(!(condition)) \
        { \
         string fullMessage= \
                            #condition+", " \
                            +__FILE__+", " \
                            +__FUNCSIG__+", " \
                            +"line: "+(string)__LINE__ \
                            +(message=="" ? "" : ", "+message); \
         \
         Alert("Assertion failed! "+fullMessage); \
         double x[]; \
         ArrayResize(x, 0); \
         x[1] = 0.0; \
        } while(false)
#else
#define assert(condition, message) 
#endif

(в ветке #else также макрос скорректирован : возвращает пустую строку (а не ";").

В таком варианте после assert(..) нужно ставить ";"