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

 
Artyom Trishkin:

Ну про input всё понятно. Про extern - там, как по мне, то сначала можно объявлять переменные с одним и тем же типом и идентификатором в разных файлах, подключаемых к проекту, а потом - оказывается нельзя их так объявлять. Тут конечно трёхэтажный импрессионизм...

Смысл extern в том, что если в основном (главном) файле есть какая-то переменная и к этом файлу подключен другой файл. И вот в этом подключенном файле надо пользоваться переменной объявленной в главном файле, тогда в подключаемом файле объявляем ее как extern. В результате подключенный файл можно компилировать, а когда компилируешь главный файл, объявление переменой в подключенном файл игнорируется.

 
Alexey Viktorov:

Ну не знаю. Для меня вся документация понятна. Если где-то появляются затруднения, то после некоторых экспериментов они пропадают.

А вот если я никак не знаком с побитовым операциями, то хоть обчитайся любых статей... я ничего с них не пойму. Равно как и о флагах и наборах флагов ничего не мог понять пока Артём мне голосом не объяснил что это такое.

она понятно если от нее требовать значения, а как это все работает до и после - мрак, самый темный мрак

 
Fast235:

она понятно если от нее требовать значения, а как это все работает до и после - мрак, самый темный мрак

Она это кто?

 
Alexey Viktorov:

Она это кто?

суть работы

 
Alena Lysenkova:

есть:
1) extern работает только в mql4.
2) комментарии после input будут отображаться во входных параметрах вместо названия входной переменной
input int ma_period = 20; 
 - будет написано "ma_period"
input int ma_period = 20; // период МА
 - будет написано "период МА"
в mql4 чтобы было именно так нужен режим строгой компиляции #property strict
с extern такого "фокуса" нет.
3) переменные extern можно менять в коде как и любые глобальные переменные, input нельзя.

Изначально был только mql4 и extern, никакого input не было. как и ООП в mql4.
Далее сделали mql5, в нем сразу сделали input, так как mql5 в целом был ориентирован именно на ООП.
года 2-3 назад в mql4 сделали апгрейд, добавив много фишек из mql5, в том числе и input.

Вы про какой терминал пишите? 

В МТ5, если в индикаторе объявить внешнюю переменную как extern, то индикатор может не получиться вызывать через iCustom().

 
Dmitry Fedoseev:

Вы про какой терминал пишите? 

В МТ5, если в индикаторе объявить внешнюю переменную как extern, то индикатор может не получиться вызывать через iCustom().

Я сейчас без упрека, но вы пишете "может не получиться"... выходит может не получиться а может и получиться! Это я о том что мне как самоучке без спец образования трудно понять такую неопределенность...

 
Alena Lysenkova:

есть:
1) extern работает только в mql4.
2) комментарии после input будут отображаться во входных параметрах вместо названия входной переменной
input int ma_period = 20; 
 - будет написано "ma_period"
input int ma_period = 20; // период МА
 - будет написано "период МА"
в mql4 чтобы было именно так нужен режим строгой компиляции #property strict
с extern такого "фокуса" нет.
3) переменные extern можно менять в коде как и любые глобальные переменные, input нельзя.

Изначально был только mql4 и extern, никакого input не было. как и ООП в mql4.
Далее сделали mql5, в нем сразу сделали input, так как mql5 в целом был ориентирован именно на ООП.
года 2-3 назад в mql4 сделали апгрейд, добавив много фишек из mql5, в том числе и input.

extern работает и там, и там. Равно как и input - и в MQL5, и в MQL4. Назначение у них разное, и в справке об этом написано.

Зачем сразу направляете человека на ошибочное представление о назначении input- и extern-переменных?

 
Dmitry Fedoseev:

Смысл extern в том, что если в основном (главном) файле есть какая-то переменная и к этом файлу подключен другой файл. И вот в этом подключенном файле надо пользоваться переменной объявленной в главном файле, тогда в подключаемом файле объявляем ее как extern. В результате подключенный файл можно компилировать, а когда компилируешь главный файл, объявление переменой в подключенном файл игнорируется.

тоже думал, что это модификатор работает как в С++, т.е. объявлен в подключаемом файле https://www.mql5.com/ru/forum/160683/page867#comment_11927748

проверил не работает как должно было в С++ работать


файл библиотеки tstextern

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
extern int koef=1 ;
 int MyCalculator(int value,int value2) export
   {
    return((value+value2)*koef);
   }
//+------------------------------------------------------------------+

файл скрипта:

#import "tstextern.ex5"
int MyCalculator(int value,int value2);
#import

extern int koef;

void OnStart()
  {
      koef = 666;
      int res = MyCalculator(100,200);
      Print("result = ",res);
   
  }
//+------------------------------------------------------------------+

любые манипуляции с переменной koef ничего не дают,она все равно в локальной области видимости (внутри каждого файла)


Artyom Trishkin:

 Назначение у них разное, и в справке об этом написано.

вся разница заключается в контроле доступа:

к input - его можно только читать, запись запрещена

extern - его можно и читать и записывать, причем после переинициализации MQL - программы это значение будет восстановлено в значение указанное во внешних настройках 

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.06.02
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Maksim Neimerik:

Я сейчас без упрека, но вы пишете "может не получиться"... выходит может не получиться а может и получиться! Это я о том что мне как самоучке без спец образования трудно понять такую неопределенность...

В том смысле, что прямо сейчас не проверял. А про то, что было когда-то, здесь опасно утверждать, потому-что все часто меняется. Может то был временный глюк. 

 
Igor Makanu:

тоже думал, что это модификатор работает как в С++, т.е. объявлен в подключаемом файле https://www.mql5.com/ru/forum/160683/page867#comment_11927748

проверил не работает как должно было в С++ работать


файл библиотеки tstextern

файл скрипта:

любые манипуляции с переменной koef ничего не дают,она все равно в локальной области видимости (внутри каждого файла)

Дак, у вас же библиотека. Конечно, будет разные переменные. Имеется ввиду подключение mqh через include.

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