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

 

Еще одна причина ввода #ifdef - большая защищенность программ. Рассмотрим пример 1 и 2:

void main()
{
   #ifdef DEMO
      Print("Эта функция не работает в демо режиме")
      return;
   #endif
   #ifndef DEMO
   //Здесь выполняется реальный функционал
   ...
   ...
   ...
   #endif
}

//Теперь этаже функция без #ifdef
#define DEMO 1
void main()
{
   if(DEMO == 1)
      Print("Эта функция не работает в демо режиме")
      return;
   //Сдесь выполняется реальный функционал
   else
   {
     ...
     ...
     ...
   } 
}
В первом случае функционал в демо версии физически будет отсутствовать, а значит его принципиально невозможно будет сломать (нельзя сломать то, чего нет). Во второй версии функционал будет присутствовать, и все что нужно, это заменить инструкцию  if(DEMO == 1) на  if(DEMO != 1),  зная код инструкции, не проблема это сделать в любом HEX-редакторе.
 
MetaDriver:
Причин много.. Но ведь таки решение принято?  Расслабиться уже можно.
А поговорить?
 
Zloy_Koldun:

Очень хорошо.

Ещё бы хотелось предопределённую константу, которая указывает разрядность MT.

Например так: __X64__ .


она почти такая и есть. 

с самого начала

причем в двух вариантах.

 

Renat:
После обсуждения мы приняли решение в следующих билдах (не в ближайшем) добавить #ifdef

Оооо !!! Премного благодарен.

Будет крутой код, который работает без изменений в MT4,МТ5 и в С# под WLD...  

 
sergeev:


она почти такая и есть. 

с самого начала

причем в двух вариантах.

Я имел ввиду константу, которую можно использовать в #ifdef.

Есои она такая есть, а я почемуто не увидел, прошу привести ссылку. 

 
Zloy_Koldun:

Я имел ввиду константу, которую можно использовать в #ifdef.

Есои она такая есть, а я почемуто не увидел, прошу привести ссылку. 


такой нет.  имеющаяся константа выглядит BOOL типа, то есть она только для #if конструкции

а конструкцию  #if  у разрабов не просили... :(  обломс.

 
sergeev:


такой нет.  имеющаяся константа выглядит BOOL типа, то есть она только для #if конструкции

а конструкцию  #if  у разрабов не просили... :(  обломс.

Не расстраивайсо.  Историческое решение касается условной компиляции в принципе.  Кости будут - мясо нарастёт.
 

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

Список изменений в билдах MetaTrader 5 Client Terminal

MetaQuotes, 2013.11.02 08:16

MetaTrader 5 Client Terminal build 871

  1. MQL5: Исправлена ошибка, препятствовавшая тестированию экспертов, содержащих пользовательские индикаторы в виде ресурса. Ошибка затрагивала в том числе и экспертов из MQL5 Market.
  2. MQL5: Добавлена поддержка условной компиляции #if[n]def, #else и #endif.
  3. MQL5: Добавлены макросы _DEBUG и _RELEASE, при компиляции *.mq5 макрос __MQL5__, при компиляции *.mq4 __MQL4__.
  4. Market: Оптимизирована работа с MQL5 Market при использовании нескольких экземпляров клиентского терминала.
  5. MetaTester: Исправлен показ вкладок и результатов тестирования при тестировании индикатора.
  6. MetaTester: Исправлено отображение подписей при использовании курсора в режиме "перекрестие" для замера расстояния между барами в режиме визуального тестирования.
  7. MetaTester: Исправлено падение тестера при завершении тестирования.
  8. Исправления по крешлогам.
  9. Обновлена документация.

Обновление доступно через систему LiveUpdate.

 
komposter:
Спасибо за новость :)
 
TheXpert:
Спасибо за новость :)

Это для истории, чтоб были видны результаты подобных веток.

Понятно, что те, кому надо, узнали сами ;) 

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