Нужна ли конструкция #ifdef #else #endif в дополнение к #define ? - страница 7

 
Пока не понятно, за что отвечают _DEBUG и _RELEASE
 
Roffild:
За то же за что и DEBUG NDEBUG в студии. Подозреваю, что _DEBUG для отладки и позволит ускорить код за счет облачения этим макросом отладочного кода и логов.
 
В Студии сборка конкретной реализации выбирается мной. А тут какие определения? Дебаг - это не только F5 вообще-то...
 
Roffild:
Ну это уже не ко мне, я только предполагаю.
 

ИМХО, пока на панель MetaEditor не добавят переключатель этих макросов при сборке, считаю их бесполезными, потому что

#ifdef DEBUG
     Print("Вывод инфы для дебага");
#endif

в тестере не сработает.

 

Замечательно !

В принципе, у меня уже давно работает псевдо DEBUG-RELEASE система, основанная на переключении инклюдов.

 Как раз пару дней назад профилировал код, и с удивлением выяснил, что в дебаг-версии у меня большая часть времени работает функция IntegerToString(), работающая в макросе TRACE().  Отладочная версия скрипта - работает раз в десять медленнее, чем релизная...

 

В общем, прекрасная новость. 

 

Сомнительная реализация #ifdef

#define MMM     1

#ifdef (MMM > 1)
#define NNN     2
#endif
понятно, что ошибка, но компилятор - молчит
 

Для MQL4 не работает пример из справочника:

#ifndef TestMode
   #define TestMode
#endif
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   #ifdef TestMode
      Print("Test mode");
   #else
      Print("Normal mode");
   #endif
  }

Написал такой код:

#include "Defines.mqh"
#include "VariablesOfCompiling.mqh"

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(5);
//--- Создать панель-----
     PANEL_CREATE
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
//--- Удалить панель-----

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   TICK_EVENT
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   TIMER_EVENT
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

Defines.mqh :

#property copyright "000"
#property link      "000"
#property strict
#define LOG(text)    Print(__FUNCTION__,",(",__LINE__,") :",text)
#define TICK_EVENT   #include "TikEvent.mqh"
#define TIMER_EVENT  #include "TimerEvent.mqh"
#define PANEL_CREATE #include "PanelCreate.mqh"

VariablesOfCompiling.mqh :

#property copyright "000"
#property link      "000"
#property strict
//============= Варианты компиляции
#ifndef TestMode
   #define TestMode 
#endif

Это начало и никакого существенного кода нет, пока только шаблон.

TimerEvent.mqh:

// Если советник компилируется в режиме тестирования то отметим прохождение этого места
#ifdef TestMode 
   LOG("Начало TimerEvent.mqh");
#endif
//*************************Начало*************************************

//*************************Конец**************************************
#ifdef TestMode 
   LOG("Конец TimerEvent.mqh");
#endif

Режим тестирования подразумевается тогда когда после написания я цепляю его на график и начинаю пробовать все функции. Для корректной настройки советника необходимо вести подробный лог.

Далее TestMode я переключаю на false, и в коде исчезают все коментарии для разработчика. Но по примеру из справочника у меня не получилось. В чем может быть проблема?

Заранее спасибо.

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