Нельзя надеяться на "авось" - раз переменная объявлена, нужно самому её инициализировать. Взял такое давно за правило и теперь всегда знаю, что в переменной нет мусора.
Владимир, ну уж тебе-то писать такое...
Input string - глобальная константная переменная и должна инициализироваться как NULL, если пользователь не задал значение.
Про локальные ежу понятно - надо инициализировать.
Владимир, ну уж тебе-то писать такое...
Input string - глобальная константная переменная и должна инициализироваться как NULL, если пользователь не задал значение.
Про локальные ежу понятно - надо инициализировать.
И вообще, мы обсуждаем не правильный стиль программирования, а то, ошибка это разработчиков или нечто типа фичи.
Я с этими строками уже несколько багов наловил, в СД их исправляют. Какая-то беда у них со строками )
И вообще, мы обсуждаем не правильный стиль программирования, а то, ошибка это разработчиков или нечто типа фичи.
Я с этими строками уже несколько багов наловил, в СД их исправляют. Какая-то беда у них со строками )
Неа. Не первый раз вижу, как кто-то надеется на "авось". Никто никому ничего не должен. Сам объявил, сам инициализировал.
Читаем техпаспорт ))
|
Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе. Инициализируются нулем, если явно не задано другое начальное значение. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой либо константным выражением.
Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы. В скриптах инициализация глобальных переменных производится перед обработкой события Start.
Читаем техпаспорт ))
|
Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе. Инициализируются нулем, если явно не задано другое начальное значение. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой либо константным выражением.
Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы. В скриптах инициализация глобальных переменных производится перед обработкой события Start.
То есть Вы продолжаете думать, что кто-то должен инициализировать за Вас? Не обижайтесь, но это пагубное наследие бесшабашности от "4".
Читаем техпаспорт ))
плохо читаете.
Input это как минимум не extern . Он ближе к #define
и тем более не глобальная переменная
---
вы лучше попробуйте в коде задать этому input другое значение, например в OnInit.
Будете удивлены наверно
Написали когда-то, чтобы не очень огорчать любителей объвить, но не инициализировать :). Верить никому нельзя.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вот столкнулся с таким, это баг или фича? )) Картинка из отладчика, входная input строка никак не задавалась, но она не равна NULL. Это терминал ее делает при старте == "" ? Если, то зачем такой сервис и разное поведение при создании обычных string и input string? Билд 1495
и код, если хотите проверить, внизу скрипт приаттачен
#property script_show_inputs
input string Symbol_;
string strGlobal;
void OnStart(){
string symbol;
if(Symbol_ == NULL)
symbol = _Symbol;
else
symbol = Symbol_;
double tickSize1, tickValueProfit1, tickValueLoss1, tickSize2, tickValue2;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE, tickSize1)) // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
return;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE_PROFIT, tickValueProfit1)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
return;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE_LOSS, tickValueLoss1))
return;
Print("tickSize1= ", DoubleToString(tickSize1,_Digits), " tickValueProfit1= ", DoubleToString(tickValueProfit1,_Digits), " tickValueLoss1= ", DoubleToString(tickValueLoss1,_Digits));
}
***