Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот беру из Документации:
Ключевое слово extern используется, чтобы объявить идентификаторы переменных как идентификаторы статического класса памяти с глобальным временем жизни. Такие переменные существуют с момента начала выполнения программы и для них память выделяется и инициализируется сразу после начала выполнения программы.
Вот беру из Документации:
А что, разве идентификаторы обычных глобальных переменных не принадлежат к статическому классу памяти? И разве их время жизни не глобально?Если вы повторно объявите например exter int v во всех своих include модулях, то ошибки не будет. Если же без extern, то компилятор ругнется на дубликат.
то есть как и написано имеем глобальный static.
но вот к сожалению делать объявление extern в функциях недопустимо. так как принцип extern работает не во время выполнения программы, а на этапе компиляции
sergeev:
но вот к сожалению делать объявление extern в функциях недопустимо. так как принцип extern работает не во время выполнения программы, а на этапе компиляции
Да вообще-то сделать можно. В функциях переменные объявленные с модификатором static тоже помещаются в статическую память и это тоже обрабатывается во время компиляции. Я вот смысл затеи не очень понимаю.
denkir: , вам это зачем? Вам принципиально, чтоб инициализация была ниже по коду?
вот компилирую:
всё работает, полёт нормальный. Зачем вообще вам extern ? Из принципа?Да вообще-то сделать можно. В функциях переменные объявленные с модификатором static тоже помещаются в статическую память и это тоже обрабатывается во время компиляции. Я вот смысл затеи не очень понимаю.
нельзя. если ты объявишь эту же переменную в другом модуле, то будет ошибка - variable already defined
а extern проходит через все модули и будет общей для всех модулей.
нельзя. если ты объявишь эту же переменную в другом модуле, то будет ошибка - variable already defined
а extern проходит через все модули и будет общей для всех модулей.
Зачем вообще вам extern ? Из принципа?
Я не о том. Посмотри код. Ему надо, чтоб переменная инициализировалась внутри функции. Я так понял. Так она и так может быть проинициализирована, даже если глoбальная переменная, значением которой она инициализируется, находится ниже по коду...
Так точно!
А где находится глобальная переменная в коде - ниже или выше по коду - разницы нет в MQL5, насколько помню.
Разрабы будут комментировать, или междусобойчик так и затихнет?
-------------------------/""""\™---------------------------|
|------------------------/*\/*\---------------------------|
|------------------------\/""\/---------------------------|
|-------------------------|\,,/|----------------------------|
|------------------------/^<>^\---------------------------|
|---------------------"\/""\\//""\/"\-----------------------|
|-------------------/```\```\/```/``\----------------------|
|-------------------\\``/``\()/``\``//----------------------|
|-------------------/``/\___/\___/\``\----------------------|
|-------------------\^`\/``[][]``\/`^/----------------------|
|------[][][]-------/```\``[][]``/```\---------[][][]--------|
|----[][][][]-------\\``/\`[][]`/\``//----------[][][][]------|
|----[][][][]--------\\/`|[=()=]|`\//-----------[][][][]------|
|-=[][][][][]====/|\=======/|\======[][][][][]=---|
|----[][][][]--------"""-////\\\\-"""-------------[][][][]------|
|----[][][][]----------/||||--|||\----------------[][][][]------|
|------[][][]----------|||||--|||||---------------[][][]--------|
|----------------------\||||--|||/--------------------------|
|-----------------------||||--||||--------------------------|
|-----------------------|||\--/|||--------------------------|
|-----------------------\||/--\||/--------------------------|
|-----------------------/||----||\--------------------------|
|---------------------[]__|---|___l-----------------------|
Описание extern в справке.
Попытаюсь объяснить по другому. Для работы функций, которые размещены в #include файлах могут потребоваться глобальные переменные, но если их просто объявить внутри *.mqh, то при компиляции может возникнуть ошибка, когда одна и та же глобальная переменная используется в нескольких *.mqh, вот тут и приходит на помощь extern. Все объявления одной глобальной переменной (с одним именем и типом) с модификатором extern "сольются" в одно объявление - компилятор объединит все объявления в одно.
Глобальная переменная в MQL5, в пределах одного mq5 файла со всеми его #include будет видна в любой функции.
Это понятно.
...Попытаюсь объяснить по другому. Для работы функций, которые размещены в #include файлах могут потребоваться глобальные переменные, но если их просто объявить внутри *.mqh, то при компиляции может возникнуть ошибка, когда одна и та же глобальная переменная используется в нескольких *.mqh, вот тут и приходит на помощь extern. Все объявления одной глобальной переменной (с одним именем и типом) с модификатором extern "сольются" в одно объявление - компилятор объединит все объявления в одно.
А вот за это разъяснение большое спасибо. По-моему, оно существенно дополняет справку. Имхо, неплохо было его туда добавить. Ну и примеры приложить...