#define как с ними работать ?

 

Собственно вопрос в теме. Никогда ранее не интересовался дефайнами, теперь хочу освоить.

Можно пару простых и пару сложных примеров ?

Больше интересует вопрос по скорости работы, есть ли смысл работать с дефайнами ?

В справке не нашёл примера создания функции, то же хотелось бы увидеть пример.

 

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

 
Maxim Dmitrievsky:

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


Можно пару примеров ?

 
Vladimir Pastushak:

Можно пару примеров ?


http://www.c-cpp.ru/books/define в гугле много :)
#define | Программирование на C и C++
  • www.c-cpp.ru
Директива #define определяет идентификатор и последовательность символов, которой будет за­мещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор так­же называется именем макроса, а процесс замещения называется подстановкой макроса. Стандар­тный вид директивы следующий: #define имя_макроса...
 
Maxim Dmitrievsky:

http://www.c-cpp.ru/books/define в гугле много :)

Спасибо!

А как сделать функцию ?

например то что сейчас я кручу

#define  dt Digits()
#define  pt Point()
#define  ND (nm)  
double dr (return NormalizeDouble((nm)*(pt),(dt))) 
никак не получается, сообразить не могу...
 
Vladimir Pastushak:

Собственно вопрос в теме. Никогда ранее не интересовался дефайнами, теперь хочу освоить.

Можно пару простых и пару сложных примеров ?

Больше интересует вопрос по скорости работы, есть ли смысл работать с дефайнами ?

В справке не нашёл примера создания функции, то же хотелось бы увидеть пример.


Например, нам требуется работать с таким числом, как количество секунд в сутках. Это число 86 400. Если его просто вставить в код, то далеко не всякий программист сможет понять, что оно обозначает. Да и сам автор кода чрез год или два, взглянув на код, будет долго вспоминать, что это такое. А если применить именованную константу:

#define SECONDS_IN_DAY           60 * 60 * 24

...
for (int i = 0; i < SECONDS_IN_DAY; ++i)
{
}
...

то все становится сразу же понятно.

Второй момент, который наиболее часто связан с применением констант, это то же самое, что и переменная, но неизменяемая в коде. Например, исходя из архитектуры программы, приняли, что советник может поддерживать только 10 ордеров одного направления. Большее количество открывать нельзя:

#define MAX_ORDERS_OF_ONE_TYPE   10

....
if (nBuyOrdersCnt < MAX_ORDERS_OF_ONE_TYPE)
{
  // Открываем еще один Buy-ордер
}
if (nSellOrdersCnt < MAX_ORDERS_OF_ONE_TYPE)
{
  // Открываем еще один Sell-ордер
}
....

Через некоторое время мы решили, что 10 ордеров одного направления - многовато. Лучше сделать 5. Чтобы не искать в коде всё, что связано с максимальным разрешенным количеством ордеров, просто меняем значение константы MAX_ORDERS_OF_ONE_TYPE и компилируем код.

Можно возразить, что в таком случае проще сделать настроечный параметр. Но на каждый "чих" вводить свой параметр нецелесообразно. Тем более, когда это связано сугубо с кодом,а вовсе не с постановкой задачи.

 
Vladimir Pastushak:

А как сделать функцию ?

например то что сейчас я кручу

никак не получается, сообразить не могу...

Это уже макросы получаются. Посмотрите у fxsaber, он их очень любит.

 
Vladimir Pastushak:

Спасибо!

А как сделать функцию ?

например то что сейчас я кручу

никак не получается, сообразить не могу...


http://www.codenet.ru/progr/cpp/Macros.php

return там не надо

в принципе-то для ф-й это наверное не так актуально, потмоу что ф-ии и так быстро и легко вызываются :)

 
Ihor Herasko:

Это уже макросы получаются. Посмотрите у fxsaber, он их очень любит.


да я видел пару примеров, но сейчас найти не могу, я видел подсчет ордеров в одну строку, но тогда этот пример я оставил на потом, 

сейчас это "потом" пришло и а я не могу найти примеры... даже у fxsaber нет таких примеров .. 

 

https://www.mql5.com/ru/forum/212128

Про defines
Про defines
  • 2017.07.26
  • www.mql5.com
Сейчас был разговор с нашим форумчанином о дефайнах...
 
Vitaly Muzichenko:

https://www.mql5.com/ru/forum/212128


К сожалению данный урок уже не актуален... Пробовал не работает ...

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