A global variable is one that may be accessed anywhere within Octave.
This is in contrast to a local variable which can only be accessed outside
of its current context if it is passed explicitly, such as by including it as a
parameter when calling a function
fcn (local_var1, local_var2)).
A variable is declared global by using a
global declaration statement.
The following statements are all global declarations.
global a global a b global c = 2 global d = 3 e f = 5
Note that the
global qualifier extends only to the next end-of-statement
indicator which could be a comma (‘,’), semicolon (‘;’), or newline
(‘'\n'’). For example, the following code declares one global variable,
a, and one local variable b to which the value 1 is assigned.
global a, b = 1
A global variable may only be initialized once in a
For example, after executing the following code
global gvar = 1 global gvar = 2
the value of the global variable
gvar is 1, not 2. Issuing a
‘clear gvar’ command does not change the above behavior, but
‘clear all’ does.
It is necessary declare a variable as global within a function body in order to access the one universal variable. For example,
global x function f () x = 1; endfunction f ()
does not set the value of the global variable
x to 1. Instead,
a local variable, with name
x, is created and assigned the value of 1.
In order to change the value of the global variable
x, you must also
declare it to be global within the function body, like this
function f () global x; x = 1; endfunction
Passing a global variable in a function parameter list will make a local copy and not modify the global value. For example, given the function
function f (x) x = 0 endfunction
and the definition of
x as a global variable at the top level,
global x = 13
will display the value of
x from inside the function as 0, but the value
x at the top level remains unchanged, because the function works with
a copy of its argument.
Programming Note: While global variables occasionally are the right solution to a coding problem, modern best practice discourages their use. Code which relies on global variables may behave unpredictably between different users and can be difficult to debug. This is because global variables can introduce systemic changes so that localizing a bug to a particular function, or to a particular loop within a function, becomes difficult.