доступность одной переменной в разных модулях программы ...

 
Можно ли объявивь переменную в одном модуле (например в библиотеке) сделать эту же переменную доступную и в другом модуле с одним значением для обоих модулей.
То есть в си есть extern
например в одной библиотеке объявляю переменную int iVar = 2; а в другом библиотеке имею к ней доступ, если объявлю эту же переменную таким образом extern int iVar;
Я пробовал так сделать для строковой переменной и всё компилируется нормально в МetaEditor, но в другом модуле значение равно NULL, а не значению строки, которое я присвоил в другом модуле. Есть ли возможность передавать переменную мужду модулями не только через функцию?
Можно конечно во тором модуле вызвать функцию GetiVar() но хотелось бы просто через переменные тем более что вроде с extern в библиотеки компилируются.
 
Общедоступными (из всех подчинённых функций) являются переменные, объявленные за пределами всех функций, например, в головной части программы..
Для передачи данных между экспертами-скриптами-индикаторами используйте https://www.mql4.com/ru/docs/grp_globals/
 
Думаю что на прамую переменная обявленная гловабло в одном модуле не может быть доступной в другом.
Еxtern в MQL4 играет другую роль: объявление входных параметров программы и только!
 
А про глобальные переменные ссылку на которые вы дали я знаю. Вот даже код приводил где я их успешно использую. Но думаю заменю на запись и чтение пременных в файл позже для моей задачи. Так я могу контролировать сброс в файл немедленно статус эксперта. А записал в глоб переменные через функции MQL4 и не уверен, а на диске ли они уже или в оперативке?
 
Кстати, SKif, а вы бы не могли протестировать скорость выполнения кода моего в ввиде советника и скрипта?
Загляните в мою темы различная скорость выполнения советника и скрипта.
Вообще, чисто визуально вы не замечали, что скрипт выполняется на много быстрее, чем советник в реальном времени кинутый на чарт?
 
elritmo,
1. Я не говорил об еxtern-переменных. Еxtern-переменные, кстати, тоже доступны всем подчинённым функциям программы (скрипта, эксперта, индикатора).
Я говорил о переменных, объявленных за пределами подчинённых функций. Считается. что они объявлены на глобальном уровне. Объявленные таким образом переменные доступны из каждой подчинённой функции и могут называться голбальными (не путать с переменными GlobalVariable) в рамках одной программы (скрипта, эксперта, индикатора).

2. Что касается скорости выполнения программ.
Вопрос интересный. Но поскольку им уже заинтересовались разработчики, моё участие не обязательно.
Могу только сказать, что сама скорость выполнения программ на MQL4 очень высокая. Код средней сложности размером ок. 10 000 строк выполняется прибл. за 10-15 мс. В редких случаях, если развитие алгоритма идёт по сложному пути с многократным обращением к функциям для обработки, длительность одного прохода может занимать до 500 мс. Для моих вычислений этого более чем достаточно.
 
Ты имеешь ввиду, если переменная определена где то в самом начале модуля программы (например файла .mqh) то она доступна всем функциям внутри этого модуля? Да, это так, но эти переменные не доступны из другого модуля но в пределах советника.
Вот у тебя в программе я видел много различных модулей. Но а как ты данные между ними передаёшь если не использовать глобальные переменные GlobalVariables? Я пока вижу возможность только через собственные функции типа GetVar SetVar, которые вызываются из другого модуля чтобы получить и изменить переменную в другом модуле, где эти переменные объявлены.
 
Скиф, если не лень поробуй всё же тот пример
 
В моём случае модуль - это одна функция или несколько функций, составляющих файл mq4. Из всех таких файлов и составляющих их функций доступны все глобальные переменные. Достаточно просто к ним обратиться.

Как должен быть организован советник, использующий глоб. переменные?
1. Головная часть - объявление глобальных переменных. ( в моём случае - это отдельный файл AG_Peremen_exp.mq4, присоединённый в эксперт AutoGraf_expert.mq4 с помощью #include)
2. 3 спец. функции ( init(), start(), deinit() ), из кот. осуществляются обращения к любым функциям.
3. Набор функций, из кот. осуществляется обращение к глоб переменным.

но эти переменные не доступны из другого модуля но в пределах советника.
Я не знаю почему в твоём случае это так. Думаю, что существует какое-то очень простое объяснение: например, модуль (функция) не присоединён к программе (советнику), или из функции нет обращения к глобальной переменной или что-либо ещё в этом духе.
 
Надо посмотреть как ты там в устроил всё. Вероятно мы не до поняли друг друга. Но код твой, может быть, всё прояснит.
 
Что то проблему с глобалными переменными в пределах советника не могу решить.
то есть допустим у меня главный модуль
expert.mq4
с кодом
#include <test_lib.mqh>
int testVar;

int init() {
testVar = 1;
}

int deinit() {
return(0);
}

int start() {
RunTestFunction();
}


и библиотека
test_lib.mq4
с кодом
int testVar;

RunTestFunction() {
Print(testVar);
}

заголовочный файл
test_lib.mqh
#import "test_lib.ex4"
RunTestFunction() ;

Так вот как сдедать так чтобы если я изменю переменную в init как testVar = 1
Чтобы в функции
RunTestFunction()
я напечатал значение testVar 1 а не 0 как сейчас получается. То есть хочу чтобы переменная, изменённая в главном модуле была доступна с тем же значением в библиотеке. Как это можно сделать?
В документации написано:
Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе.
Но как это оформить если советник состоит из нескольких файлов программы?
Причина обращения: