Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Собственно вопрос в теме. Никогда ранее не интересовался дефайнами, теперь хочу освоить.
Можно пару простых и пару сложных примеров ?
Больше интересует вопрос по скорости работы, есть ли смысл работать с дефайнами ?
В справке не нашёл примера создания функции, то же хотелось бы увидеть пример.
#define это команда препроцессору компилятора, который перед компиляцией заменяет одну запись другой. Следовательно на производительности это никак не сказывается, т.к. все расчеты происходят до компиляции. Пример, пусть Вам нужно будет найти максимум массива с помощью ArrayMaximum. Если максимум не найден функция вернет -1. Эту константу можно заменить на более выразительное:
Надо однако понимать, что #define - это наследство от старых языков программирования. Сейчас использование #define надо избегать, или по крайней мере использовать очень ограничено, на уровне простых подстановок. Поэтому не пытайтесь учиться тому, от чего уже в цивилизованном мире программирования давно стараются отмежеваться.
Спасибо!
А как сделать функцию ?
например то что сейчас я кручу
никак не получается, сообразить не могу...То, что Вы делаете, отличный способ убиться. Ни в коем случае так не пишите.
https://www.mql5.com/ru/docs/basis/preprosessor/constant - объяснение проще не бывает и примеры есть - даже я понял.
http://www.codenet.ru/progr/cpp/Macros.php
return там не надо
в принципе-то для ф-й это наверное не так актуально, потмоу что ф-ии и так быстро и легко вызываются :)
Замечу, у каждой функции есть пролог и эпилог, то есть даже такая ф-я будет медленнее чистого кода. Я не призываю заменять функции макросами ))) просто для справки
#define это команда препроцессору компилятора, который перед компиляцией заменяет одну запись другой. Следовательно на производительности это никак не сказывается, т.к. все расчеты происходят до компиляции. Пример, пусть Вам нужно будет найти максимум массива с помощью ArrayMaximum. Если максимум не найден функция вернет -1. Эту константу можно заменить на более выразительное:
Надо однако понимать, что #define - это наследство от старых языков программирования. Сейчас использование #define надо избегать, или по крайней мере использовать очень ограничено, на уровне простых подстановок. Поэтому не пытайтесь учиться тому, от чего уже в цивилизованном мире программирования давно стараются отмежеваться.
дефайн плох тем, что не имеет типа, рекомендуется использовать константы
**
Замечу, у каждой функции есть пролог и эпилог, то есть даже такая ф-я будет медленнее чистого кода. Я не призываю заменять функции макросами ))) просто для справки
Не будет.
Код:
Результат:
2017.07.27 20:53:10.788 callf (MXI-9.17,M15) time for n++:27 n=10000000000.0
2017.07.27 20:53:37.014 callf (MXI-9.17,M15) time for f():26 n=20000000000.0
Код:
Результат:
2017.07.27 20:55:10.144 callf (MXI-9.17,M15) time for n++:0 n=10000000000
2017.07.27 20:55:10.144 callf (MXI-9.17,M15) time for f():0 n=20000000000
Ренат говорит, что простые маленькие функции компилятор инлайнит. Директивы #inlain в языке нет, он делает это автоматически
Инлайнит он не подетски. И функция не обязательно должна быть простой и маленькой что бы быть заинлайненой.
Короче, попытки обыграть компьютер на его поле приводят к неизбежному проигрышу. #define штука опасная, не даром от нее отказались в современных ЯП. Если она и осталась то на уровне '#define DEBUG' не больше.
Инлайнит он не подетски. И функция не обязательно должна быть простой и маленькой что бы быть заинлайненой.
Короче, попытки обыграть компьютер на его поле приводят к неизбежному проигрышу. #define штука опасная, не даром от нее отказались в современных ЯП. Если она и осталась то на уровнеляции, я часто используютакже на уровне условной '#define DEBUG' не больше.
А также на уровне условной компиляции
**