Новая версия MetaTrader 4 Client Terminal build 432 - страница 23
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
это реальный баг. так как обновление значения переменной, передаваемой по ссылке, происходит только после выхода из функции.
Это не баг. Это именно так и реализовано с самого начала. А именно: "Обновление значения переменной, передаваемой по ссылке, происходит только после выхода из функции."
И это поведение не будет меняться.
А именно: "Обновление значения переменной, передаваемой по ссылке, происходит только после выхода из функции."
И это поведение не будет меняться.
Нельзя ли подправить? Пустячок ведь, но с клавиатуры удобнее закрывать окно.
это значит что вы полностью нарушаете работу всех вложенных функций. смысл этого нововведения не понятен.
Какое нововведение? В MQL4 так было всегда.
В чём нарушение? После завершения функции вы получаете изменённое значение.
Какое нововведение? В MQL4 так было всегда.
В чём нарушение? После завершения функции вы получаете изменённое значение.
Возможно, так и было всегда. Я, например, этого не знал. Но, согласитесь, достаточно тяжело помнить такие вот нюансы, когда работаешь на трех языках (MQL4, MQL5 и C++), которые декларируются как родственные. Получается, что в пору составлять некую таблицу отличий в поведении:
Не спорю, таких примеров с другими нюансами в поведении различных языков программирования можно привести массу, не касаясь MQL4 и MQL5 (чего только стоят различные компиляторы C++). Но для чего сделано подобное отличие в MQL4 и почему такое поведение все же изменено в MQL5 - непонятно.
Какое нововведение? В MQL4 так было всегда.
В чём нарушение? После завершения функции вы получаете изменённое значение.
нарушение в том, что любую переменную в пределах области видимости принято считать измененной сразу после изменения её в коде, а не после всевозможных исскуственных задержек, что делает отладку программы непредсказуемой.
к тому же нарушается основное правило видимости переменных - внешняя переменная невидима внутри вложенной функции, что противоречит основам программирования.
зачем понадобилась такая неадекватная логика программирования непонятно.
нарушение в том, что любую переменную в пределах области видимости принято считать измененной сразу после изменения её в коде, а не после всевозможных исскуственных задержек, что делает отладку программы непредсказуемой.
Нужно правильно понимать особенности построения (любого) языка программирования. В любом языке есть два типа закономерностей:
1. Жёсткие закономерности, придерживаться которых обязательно - это такие, которые диктуются правилами математики и законами логики.
2. Закономерности, которые закладываются по свободному выбору разработчиков, - для таких нет принципиальных оснований.
Языки потому и отличаются, что 2й тип закономерностей все разработчики закладывают из каких-то своих соображений.
В данном случае нужно просто знать, что в MQL4 это сделано так.
В подобном коде
int x;
init(){
func1(x);
}
//---------
void func1(int& x){
x = 1;
Alert("func1:x=",x);
func2();
}
//---------
void func2(){
Alert("func2:x=",x);
}
//---------
не нужно передавать глобальную переменную по ссылке. И не стоит внутри функции использовать одинаковые названия для глобальной и локальной переменных.
int Glob_X;
int init()
{
func1();
}
//---------
void func1()
{
Alert("func1:Glob_X=",Glob_X); // на входе 0
Glob_X = 1; // явно меняем значение
Alert("func1:Glob_X=",Glob_X); // текущее значение 1
func2();
}
//---------
void func2()
{
Alert("func2:Glob_X=",Glob_X);// текущее значение 1
}
//---------
Если требуется произвести вычисления с текущим значением глобальной переменной и не испортить его, нужно воспользоваться локальной переменной - присвоить ей значение глобальной и делать с ней что необходимо.
Подскажите МТ4 со старой историей котировок? Желательно, чтоб котировки eur-usd с 1990 года были, побольше различных инструментов, фьючи и т.д.
Если требуется произвести вычисления с текущим значением глобальной переменной и не испортить его, нужно воспользоваться локальной переменной - присвоить ей значение глобальной и делать с ней что необходимо.
вообщем выход тут это передавать по ссылке параметр и во вложенную функцию и тогда значение посчитается корректно и внутри функции, а иначе будет ошибка.
хотя конечно тот кто не знает этого причуда MQ4 будет иметь очень трудно-находимые баги.