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

 

Вообще надо начать с того, что глобальные переменные - зло.  А уж когда такая переменная используется многих файлах и может быть изменена откуда угодно, то это зло в квадрате!  Поэтому такие переменные нужно всегда объявлять константными  (если только речь не идёт об вспомогательных переменных для отладочных целей, не влияющих на логику алгоритма).

Так вот, если мы имеем константную глобальную переменную, то напрашивается очевидный вывод: а не проще ли добавить к ней пару скобок в конце, превратив в функцию, и тем самым получив гибкие возможности по заданию любой реализации для этой функции.  А уж учитывая недоработанность extern-переменных в MQL, о чём я писал выше, альтернатив у нас и нет.
 
Спецификатор extern нужен если проект состоит из нескольких mq5 файлов (не путать с mqh). В этом случае глобальные переменные имеет смысл объявить в отдельном файле. Если проект состоит из mqh и собирается на #include, то extern не нужен, так как, по сути, это один файл, разбитый на несколько.
 
Vladimir Simakov:
Спецификатор extern нужен если проект состоит из нескольких mq5 файлов (не путать с mqh). В этом случае глобальные переменные имеет смысл объявить в отдельном файле. Если проект состоит из mqh и собирается на #include, то extern не нужен, так как, по сути, это один файл, разбитый на несколько.

пример нужен, я пробовал использовать extern в библиотеках - он не работает https://www.mql5.com/ru/forum/316795/page2#comment_12259472

 
Igor Makanu:

пример нужен, я пробовал использовать extern в библиотеках - он не работает https://www.mql5.com/ru/forum/316795/page2#comment_12259472

Он не для библиотек, а для проектов. Проект можно собирать либо на #include, либо делать несколько mq5 файлов. Вот, во втором случае и нужен extern, что бы вводить глобальные переменные в область видимости разных файлов.
 
Vladimir Simakov:
Вот, во втором случае и нужен extern, что бы вводить глобальные переменные в область видимости разных файлов.

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

 
Vladimir Simakov:
Он не для библиотек, а для проектов. Проект можно собирать либо на #include, либо делать несколько mq5 файлов. Вот, во втором случае и нужен extern, что бы вводить глобальные переменные в область видимости разных файлов.
Каким же образом вводить в область видимости?  mq5-файлы в проекте каждый сам по себе, они никак не связаны.  Компиляция каждого файла происходит независимо, разве нет?
 
Весь прикол в том, что extern оказался просто не нужным. Переменная, объявленная на глобальном уровне в любом файле проекта, доступна во всех его файлах. А зачем? Вопрос к создателям.
 
Vladimir Simakov:
Весь прикол в том, что extern оказался просто не нужным. Переменная, объявленная на глобальном уровне в любом файле проекта, доступна во всех его файлах. А зачем? Вопрос к создателям.

Вы можете объявить переменную extern во всех *.mqh файлах, в которых она используется.

Тогда, такие *.mqh файлы не зависят от *.mq5 (или другого *.mqh)  файла, в котором объявлена глобальная переменная.
Это позволяет использовать файлы в других проектах, повышая повторное использование кода.

 
Ilyas:

Вы можете объявить переменную extern во всех *.mqh файлах, в которых она используется.

Тогда, такие *.mqh файлы не зависят от *.mq5 (или другого *.mqh)  файла, в котором объявлена глобальная переменная.
Это позволяет использовать файлы в других проектах, повышая повторное использование кода.

Спасибо, теперь понял логику. Я изначально думал, что он аналогичен extern в С++.
 
Vladimir Simakov:
Спасибо, теперь понял логику. Я изначально думал, что он аналогичен extern в С++.

А разве не аналогичен?

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