Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Представьте, что эти инициализации выполнены в разных подключаемых файлах. Тогда итоговый результат будет зависеть от порядка включений этих файлов.
ну вот - даже такие явные баги с этими extern
вот я и пишу, что смысла в них нет, они только для совместимости со старыми кодами - увидел extern замени на input и исправь ошибки... а то в справке написано... туманное предназначение.... нет смысла в extern - как не ищи
Реализация extern-переменных в MQL5 к сожалению не доработана, а потому применять её не советую, чревато проблемами. Речь идёт об отсутствии контроля за обязательной однократностью инициализации этих переменных.
Например, можно написать так:
и ошибки не будет. Представьте, что эти инициализации выполнены в разных подключаемых файлах. Тогда итоговый результат будет зависеть от порядка включений этих файлов.
Или так (исполняемый файл):
здесь мы вообще не проинициализировали extern-переменную, но ошибки тоже нет.
Соответственно нет контроля за тем, определены ли такие же переменные в других файлах или нет. Вы можете случайно поменять её имя, но программа будет компилироваться как ни в чём не бывало, хотя в других файлах у нас переменная с другим именем.
В общем, такое никуда не годится. Поэтому вместо extern-переменных лучше использовать функции. У них гарантируется только одно определение, не больше и не меньше.
При таком подходе и компьютером вообще пользоваться не стоит. Потому что, если закрыть глаза, потыкать по клаве - получится фигня.
А настоящая проблем в extern возникает когда пытаешься сделать extern из input. Деталей не помню, давно было. В итоге, вообще отказался от extern, объявил во включаемом файле простую переменную, а в ините советника устанавливал ей значение через вызов функции.
ну вот - даже такие явные баги с этими extern
вот я и пишу, что смысла в них нет, они только для совместимости со старыми кодами - увидел extern замени на input и исправь ошибки... а то в справке написано... туманное предназначение.... нет смысла в extern - как не ищи
Есть смысл. В МТ5 во включаемых файлах extern это совсем не input.
Есть смысл. В МТ5 во включаемых файлах extern это совсем не input.
зачем во включаемых файлах добавлять inputы ?
не знаю, что там творится в современном мире написания программ, но учился я писать в процедурном стиле, затем начал использовать ООП, что в первом, что во втором стиле подразумевается, что каждый логический блок должен быть полностью функционален при переносе в другую программу, т.е. написали функцию - у нее в в описании (в заголовке) есть все параметры которые она использует - ей inputы не нужны - вырезали эту функцию и вставили в другой файл, она "переехала" как есть - также и с классами.
А сами inputы должны лишь создавать интерфейс пользователя, они всегда должны быть описаны в главном файле.
А использование extern в подключаемом файле, имхо способ получить трудноотслеживаемый баг, @Alexey Navoykov выше показал как это бывает, к сожалению более половины имен переменных у всех программистов имеют до буквы одинаковые имена, максимум отличие в использовании заглавных/строчных букв, как пример MagicNumber или Magic - если посмотреть КБ, то через один будут такие переменные, так и в Вашем способе есть угроза "затенить" extern на свою переменную, благо сейчас мало кто использует externы
зачем во включаемых файлах добавлять inputы ?
не знаю, что там творится в современном мире написания программ, но учился я писать в процедурном стиле, затем начал использовать ООП, что в первом, что во втором стиле подразумевается, что каждый логический блок должен быть полностью функционален при переносе в другую программу, т.е. написали функцию - у нее в в описании (в заголовке) есть все параметры которые она использует - ей inputы не нужны - вырезали эту функцию и вставили в другой файл, она "переехала" как есть - также и с классами.
А сами inputы должны лишь создавать интерфейс пользователя, они всегда должны быть описаны в главном файле.
Не так. Во включаемые файлы добавлять extern'ы. Для того, что бы во включаемом файле можно было пользоваться input'ами, объявленными в главном файле.
Между прочим и потребность в этом возникает почти сразу, как начинаешь пользоваться включаемыми файлами.
Не так. Во включаемые файлы добавлять extern'ы. Для того, что бы во включаемом файле можно было пользоваться input'ами, объявленными в главном файле.
Между прочим и потребность в этом возникает почти сразу, как начинаешь пользоваться включаемыми файлами.
пример дайте целесообразности использования extern
пример дайте целесообразности использования extern
Уже давно здесь
При таком подходе и компьютером вообще пользоваться не стоит. Потому что, если закрыть глаза, потыкать по клаве - получится фигня.
Уже давно здесь
ну вот я про это и говорил
Ваш пример это порождение скрытых багов, имя переменной х - часто используют.... выше писал
имхо это должно было так выглядеть:
ну вот я про это и говорил
Ваш пример это порождение скрытых багов, имя переменной х - часто используют.... выше писал
имхо это должно было так выглядеть:
Не пойдет. Переменная x должна быть доступна не только в одной функции, а во всех. И даже больше - она должна быть доступна как в главном файле, так и во всех подключенных файлах.