Edit Anything

Professional text and hex editing
with Binary Templates technology.






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



Our Products


Latest News


Download
- 010 Editor
v7.0.2
is now available.

Download it now!
What's New in 7.0.2?


Newsletter
Join our newsletter to receive tips and tricks on hex editing, special offers, and news from SweetScape Software Inc.

Sign-up Now...