Чего молчим? Никому не нада? :)
Вот практичный пример. Всё работает.
#define RANGE_CHECK(x) // Если строка пуста - проверки изымаются из кода //#define RANGE_CHECK(x) x // Если в строке x - задефайненный код обрабатывается #define i2s IntegerToString ................. ........... // присваивание значений bool Set(int i,int j,float Value) { RANGE_CHECK ( if(i>=0 && j>=0 && i<_size_L && j<_max_R) ) // End RANGE_CHECK { _a[i*_size_R+j]=Value; return true; } RANGE_CHECK ( else { Print(__FUNCTION__+" : Ошибка индексации ["+i2s(i)+":"+i2s(j)+"]"); return false; } ) // End RANGE_CHECK } // получение значений float const Get(int i,int j) { RANGE_CHECK ( if(i>=0 && j>=0 && i<_size_L && j<_max_R) ) // End RANGE_CHECK return _a[i*_size_R+j]; RANGE_CHECK ( else { Print(__FUNCTION__+" : Ошибка индексации ["+i2s(i)+":"+i2s(j)+"]"); return((float)EMPTY_VALUE); } ) // End RANGE_CHECK }
Можно определять различные макросы для скрытия частей кода.
Типичный случай - различные проверки, которые замедляют, НО во время отладки лучше шоб были.
А вот когда отлажено - можно и ускориться - за счёт отключения избыточных проверок.
отличная находка .
про целые блоки моя мысль не дошла.
хотя нечто похожее активно используется в Controls стандартной либы
отличная находка .
про целые блоки моя мысль не дошла.
хотя нечто похожее активно используется в Controls стандартной либы
А #ifdef еще нету?
Но действительно - очень интересно.
А #ifdef еще нету?
вместо #ifdef в MQL5 применяются //
:)
А #ifdef еще нету?
Увы. Не раз прошено.
_______
#define __DEBUG(x) x #define __RELEASE(x) // завязка № раз #define PERFORM(x) __MODE(x) void assert(bool x) { if (!x) DebugBreak(); } // завязка № два #define ASSERT(x) __MODE({assert(x);}) // единственное задание мода #define __MODE(x) __RELEASE(x) void OnStart() { ASSERT(false); PERFORM(Print("Assertion failed!");) }
// пошел свои ассерты переписывать )
Так, мне нужно определенное время, чтобы это усвоить :)
Суть в том, чтобы строить все условные макросы на простой базовой конструкции, так, чтобы можно было переключиться изменением в одной строке.
Не #ifdef конечно, далеко не так гибко, но пока пойдет.
У меня в коде завязка на debug release которую я так хотел, но что-то не соображалось, пока вот Владимир носом не ткнул :)
У меня в коде завязка на debug release которую я так хотел, но что-то не соображалось, пока вот Владимир носом не ткнул :)
Возможный вариант для дебаг/релиз :
#define _MODE_(DEBUG, RELEASE) DEBUG ........... .. _MODE_ ( // debug-code ... ........................ // end debug-code , // release-code ....... ................. ) // end release code
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хорошая новость.