Почему input string не имеют значение NULL?

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

Вот столкнулся с таким, это баг или фича? )) Картинка из отладчика, входная input строка никак не задавалась, но она не равна NULL. Это терминал ее делает при старте == "" ? Если, то зачем такой сервис и разное поведение при создании обычных string и input string? Билд 1495 

str


 и код, если хотите проверить, внизу скрипт приаттачен

#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));
}

***


 

Файлы:
Vladimir Karputov
Модератор
181890
Vladimir Karputov  
Нельзя надеяться на "авось" - раз переменная объявлена, нужно самому её инициализировать. Взял такое давно за правило и теперь всегда знаю, что в переменной нет мусора.
Alexey Volchanskiy
27265
Alexey Volchanskiy  
Vladimir Karputov:
Нельзя надеяться на "авось" - раз переменная объявлена, нужно самому её инициализировать. Взял такое давно за правило и теперь всегда знаю, что в переменной нет мусора.

Владимир, ну уж тебе-то писать такое...

Input string - глобальная константная переменная и должна инициализироваться как NULL, если пользователь не задал значение.

Про локальные ежу понятно - надо инициализировать. 

Vladimir Karputov
Модератор
181890
Vladimir Karputov  
Alexey Volchanskiy:

Владимир, ну уж тебе-то писать такое...

Input string - глобальная константная переменная и должна инициализироваться как NULL, если пользователь не задал значение.

Про локальные ежу понятно - надо инициализировать. 

Неа. Не первый раз вижу, как кто-то надеется на "авось". Никто никому ничего не должен. Сам объявил, сам инициализировал.
Alexey Volchanskiy
27265
Alexey Volchanskiy  

И вообще, мы обсуждаем не правильный стиль программирования, а то, ошибка это разработчиков или нечто типа фичи.

Я с этими строками уже несколько багов наловил, в СД их исправляют. Какая-то беда у них со строками ) 

Vladimir Karputov
Модератор
181890
Vladimir Karputov  
Alexey Volchanskiy:

И вообще, мы обсуждаем не правильный стиль программирования, а то, ошибка это разработчиков или нечто типа фичи.

Я с этими строками уже несколько багов наловил, в СД их исправляют. Какая-то беда у них со строками ) 

То есть Вы продолжаете думать, что кто-то должен инициализировать за Вас? Не обижайтесь, но это пагубное наследие бесшабашности от "4".
Alexey Volchanskiy
27265
Alexey Volchanskiy  
Vladimir Karputov:
Неа. Не первый раз вижу, как кто-то надеется на "авось". Никто никому ничего не должен. Сам объявил, сам инициализировал.

Читаем техпаспорт ))

Справочник MQL5 / Основы языка / Переменные / Глобальные переменные

Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе. Инициализируются нулем, если явно не задано другое начальное значение. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой либо константным выражением.

Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы. В скриптах инициализация глобальных переменных производится перед обработкой события Start. 

Vladimir Karputov
Модератор
181890
Vladimir Karputov  
Alexey Volchanskiy:

Читаем техпаспорт ))

Справочник MQL5 / Основы языка / Переменные / Глобальные переменные

Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе. Инициализируются нулем, если явно не задано другое начальное значение. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой либо константным выражением.

Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы. В скриптах инициализация глобальных переменных производится перед обработкой события Start. 

Написали когда-то, чтобы не очень огорчать любителей объвить, но не инициализировать :). Верить никому нельзя.
Alexey Volchanskiy
27265
Alexey Volchanskiy  
Vladimir Karputov:
То есть Вы продолжаете думать, что кто-то должен инициализировать за Вас? Не обижайтесь, но это пагубное наследие бесшабашности от "4".
Да при чем тут четверка-то? Это стандарт С/С++/MQL по части инициализаций глобальных переменных.
---
22802
---  
Alexey Volchanskiy:

Читаем техпаспорт ))

плохо читаете.

Input это как минимум не extern . Он ближе к #define

и тем более не глобальная переменная

---

вы лучше попробуйте в коде задать этому input другое значение, например в OnInit.

Будете удивлены наверно

Alexey Volchanskiy
27265
Alexey Volchanskiy  
Vladimir Karputov:
Написали когда-то, чтобы не очень огорчать любителей объвить, но не инициализировать :). Верить никому нельзя.
Все ясно, пишу в СД..
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий