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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Pastushak
76216
Vladimir Pastushak  

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

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

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

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

Maxim Dmitrievsky
17530
Maxim Dmitrievsky  

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

Vladimir Pastushak
76216
Vladimir Pastushak  
Maxim Dmitrievsky:

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


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

Maxim Dmitrievsky
17530
Maxim Dmitrievsky  
Vladimir Pastushak:

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


http://www.c-cpp.ru/books/define в гугле много :)
#define | Программирование на C и C++
  • www.c-cpp.ru
Директива #define определяет идентификатор и последовательность символов, которой будет за­мещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор так­же называется именем макроса, а процесс замещения называется подстановкой макроса. Стандар­тный вид директивы следующий: #define имя_макроса...
Vladimir Pastushak
76216
Vladimir Pastushak  
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))) 
никак не получается, сообразить не могу...
Ihor Herasko
19612
Ihor Herasko  
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 и компилируем код.

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

Ihor Herasko
19612
Ihor Herasko  
Vladimir Pastushak:

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

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

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

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

Maxim Dmitrievsky
17530
Maxim Dmitrievsky  
Vladimir Pastushak:

Спасибо!

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

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

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


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

return там не надо

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

Vladimir Pastushak
76216
Vladimir Pastushak  
Ihor Herasko:

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


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

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

Vitaly Muzichenko
12561
Vitaly Muzichenko  

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

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

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


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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий