Shared
Variable declaration modifier specifying visibility throughout a module
Syntax
`
Dim Shared ...
ReDim Shared ...
Common Shared ...
Static Shared ...
`
Description
`Shared` makes module-level variables visible inside `Sub`s and `Function`s.
If `Shared` is not used on a module-level variable's declaration, the variable is only visible to the module-level code in that file (furthermore, only a variable declared with `Dim` without `Shared` modifier, and not inside a Namespace block, is stored on the stack).
Note: A shared variable may only be initialized with a constant value: its starting value is set at the start of the program before any code is run, and so it cannot depend on any variables or functions in it. The exception is a shared variable of var-len string type, which never can be initialized, even with a constant string, because of its structure with a descriptor pointing to dynamic memory block.
Example
`
'' Compile with -lang qb or fblite
'$lang: "qb"
Declare Sub MySub
Dim Shared x As Integer
Dim y As Integer
x = 10
y = 5
MySub
Sub MySub
Print "x is "; x 'this will report 10 as it is shared
Print "y is "; y 'this will not report 5 because it is not shared
End Sub
`
Differences from QB

- The `Shared` statement inside scope blocks -- functions, subs, if/thens, and loops -- is not supported. Use `Dim`|`Redim`|`Common`|`Static Shared` in the main program instead. Or if you're inside a scope block and `Redim`ming a variable or array previously set up with `Shared`, just do a `Redim` without `Shared`; it will work fine and won't ruin anything.

See also

- `Common`
- `Dim`
- `Erase`
- `Extern`
- `LBound`
- `ReDim`
- `Preserve`
- `Static`
- `UBound`
- `Var`