Разница между extern и input - страница 4

 
Igor Makanu:

а если переменную типа enum  обьявить? 

implicit enum conversion tst1.mq5 24 17


можно еще EnumToString() проверить...


думаю что тип без объявленных переменных просто был выброшен из компиляции как не используемый

я к тому что можно случайно объявить переменную с тем же именем что в уже в enum используется и потом очень долго и болезненно искать где и в каком месте я себе прострелил колено

 
Maksim Neimerik:
Так каков вердикт Господа?) Если я пишу .mq5 программу с .mqh (#include), я могу смело прописывать extern и не бояться неожиданных последствий (как я это делал в mql4) или все же использовать input ?

В МТ5 для объявления внешних переменных использовать input. У extern в MT5 другое назначение.

 
Dmitry Fedoseev:

В МТ5 для объявления внешних переменных использовать input. У extern в MT5 другое назначение.

почему в МТ5 нельзя использовать extern? - я свой пример в МТ5 компилировал, не вижу принципиальной разницы

 
Igor Makanu:

почему в МТ5 нельзя использовать extern? - я свой пример в МТ5 компилировал, не вижу принципиальной разницы

Потому, что люди по привычке, оставшейся от древнего MQL4, пытаются использовать extern для входных параметров.

А в новом MQL4 и в MQL5 для этих целей нужен input совместно с #property strict, а extern - для других.

Потому и сказано было - не использовать extern.

 
Artyom Trishkin:

Потому, что люди по привычке, оставшейся от древнего MQL4, пытаются использовать extern для входных параметров.

А в новом MQL4 и в MQL5 для этих целей нужен input совместно с #property strict, а extern - для других.

Потому и сказано было - не использовать extern.

вот каждый пытается написать многобукафф и в итоге получается, что то НЕ использовать ТОЛЬКО в МТ5, то НЕ ИСПОЛЬЗОВАТЬ вообще нигде )))


ладно, холивар начинается, имхо - увидел в старом коде extern - замени на input и исправь все предупреждения и да пребудет с тобой сила MQL !!!!

 
Igor Makanu:

вот каждый пытается написать многобукафф и в итоге получается, что то НЕ использовать ТОЛЬКО в МТ5, то НЕ ИСПОЛЬЗОВАТЬ вообще нигде )))


ладно, холивар начинается, имхо - увидел в старом коде extern - замени на input и исправь все предупреждения и да пребудет с тобой сила MQL !!!!

Мало что понял из написанного.

Но имел в виду - не использовать extern в MQL5 и MQL4 с #property strict для объявления внешних параметров программ, а использовать по назначению, описанному (туманно) в справке.

 

Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике)? Это же так? Если да то продолжу...

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

я наверное новую тему создам.
 
Maksim Neimerik:
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике)? Это же так? Если да то продолжу...

не проблемнее, а просто в MQL5 с iCustom() приходится работать в 2 этапа:

1. получили хендл индикатора

2. запросили  значения индикаторных буферов через CopyBuffer()


в MQL4 - iCustom() работает как вызов функции с параметрами - вызвал, получил

в MQL5 все так работает, разработчики зачем то умышленно урезали функционал встроенных функций и сделали обращение к таймсериям неудобными - только не давно добавили в MQL5 iClose(), iHigh() , раньше нужно было копировать в массив данные как с CopyBuffer()

в общем в МТ5 больше писанины просто чем в МТ4

 
Igor Makanu:

не проблемнее, а просто в MQL5 с iCustom() приходится работать в 2 этапа:

1. получили хендл индикатора

2. запросили  значения индикаторных буферов через CopyBuffer()


в MQL4 - iCustom() работает как вызов функции с параметрами - вызвал, получил

в MQL5 все так работает, разработчики зачем то умышленно урезали функционал встроенных функций и сделали обращение к таймсериям неудобными - только не давно добавили в MQL5 iClose(), iHigh() , раньше нужно было копировать в массив данные как с CopyBuffer()

в общем в МТ5 больше писанины просто чем в МТ4

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

MQL4 & MQL5
MQL4 & MQL5
  • 2019.06.29
  • www.mql5.com
Я тут вот что думаю, просто мысли... В MQL5 ведь намного проблемнее работа с iCustom() чем в MQL4 (да и вообще с вызовом индикаторов в советнике...
 

Реализация extern-переменных в MQL5 к сожалению не доработана, а потому применять её не советую, чревато проблемами.  Речь идёт об отсутствии контроля за обязательной однократностью инициализации этих переменных.

Например, можно написать так:

extern int a=1;
extern int a=2;

и ошибки не будет.  Представьте, что эти инициализации выполнены в разных подключаемых файлах. Тогда итоговый результат будет зависеть от порядка включений этих файлов.

Или так (исполняемый файл):

extern int a;

void OnStart() { Print(a); }

здесь мы вообще не проинициализировали extern-переменную, но ошибки тоже нет.

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

В общем, такое никуда не годится. Поэтому вместо extern-переменных лучше использовать функции.  У них гарантируется только одно определение, не больше и не меньше.

Причина обращения: