2.3. Область действия внутренних переменных
Когда внутренние переменные создаются путем их описания либо в качестве аргументов программы или части блока программы, то их область действия ограничена только этой программой. В примере урока 2.2 внутренние переменные var1 и var2 доступны только для команд, которые находятся в пределах описания программы MYPROG1 и которые идут ПОСЛЕ описания каждой переменной (например, команда MSGBOX()).
Можно создать внутреннюю переменную, чья область действия будет значительно шире - то есть распространяться на весь исходный файл. В предыдущей версии эти внутренние переменные были неверно названы как "не экспортируемые глобальные переменные". Они были внутренними переменными, которые описываются в сокращенном стиле. Но, прежде всего, внутренняя переменная, описанная ВНЕ любого блока программы, считается "глобальной" для всех программ в исходном файле, так как любые программы, описанные после такой переменной, могут ее использовать. Однако она называется внутренней не только потому, что она обычно описывается с помощью команды LOCAL, но также потому, что ее область действия ограничена исходным файлом.
Примеры ниже показывают, как такой тип внутренней переменной можно описать и использовать:
Код:
LOCAL var1, var2, var3; // описывает переменные var1, var2 и var3 как внутренние для данного исходного файла; могут быть использованы всеми программами, введенными ниже этой строки кода
var4, var5, var6; // фактически то же самое, что выше, то есть команда LOCAL - это необязательный элемент при описании внутренних переменных, используемых внутри всего исходного файла
EXPORT MAINPRG()
BEGIN
var1 := var2+var3;
var4 := 1;
END;
SUBROUTINE()
BEGIN
LOCAL var7; // данная внутренняя переменная может использоваться только в рамках подпрограммы SUBROUTINE()
var7 := var4+var5-var1;
END;
Внутренние переменные от var1 до var6 могут быть использованы в любой программе, определенной далее в исходном файле. В отличие от внутренних переменных, описанных внутри блока программы, такой как переменная var7 в примере выше, внутренние переменные, описанные вне любого блока программы, сохраняют свои значения, даже после завершения программы и вплоть до перекомпилирования исходника. Это единственное существенное различие. Но они недоступны для программ, определенных в другом исходном файле, или для пользователя.