SweetScape Knowledgebase KB1025: How does scope work when defining local variables?
The scope of a variable refers to where in a template or script a
variable can be accessed. A local variable (see KB1019
for more information) that is defined in the main program (not
inside a function or structure) is called a global variable. Such a variable
can be accessed anywhere in the template or script. However, things get more complicated when
a local variable is defined within a struct. For example:
struct {
// Define a local variable
local int ARRAY_SIZE = 5;
struct {
int ar[ARRAY_SIZE]; // ARRAY_SIZE can be accessed here
} s1;
} data;
// The following line generates an ERROR
// since ARRAY_SIZE cannot be accessed here
Printf( "%d\n", ARRAY_SIZE );
In general, local variables can be accessed inside the struct they are
defined in, and any other sub-structures defined inside that structure, but
they cannot be accessed outside the structure.
One tricky area with scope is when functions are introduced into the
picture, and this is where there is a difference between version 2.1 and
3.0 of 010 Editor. If version 2.1 and before, local variables inside a
user-defined function could be accessed by structures defined inside the
function; however, this behaviour caused some unexpected behaviour on some
templates so it was removed in 3.0. For example, the follow template:
struct DATA;
void my_function()
{
local int SIZE = 5;
DATA r;
}
struct DATA
{
int range[SIZE]; // SIZE can be accessed in v2.1, but not in v3.0
};
my_function();
The variable SIZE can be accessed in the struct DATA in version 2.1 of 010 Editor, but not
in version 3.0 (the template will not compile). In version 3.1, this problem will be solved
by allowing structs to receive arguments so values can be passed into the struct. In 3.0,
the only way to handle this issue is to assign the value of SIZE to a global local variable.
Back to knowledgebase index
Back to main support page
|