Help Center›FreeBASIC
Sharedkeyword
Variable declaration modifier specifying visibility throughout a module
Syntax
Dim Shared ...
ReDim Shared ...
Common Shared ...
Static Shared ...
[Static] Var Shared ...
Description
Shared makes module-level variables visible inside Subs and Functions.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).NOTES (for
Shared variables excluding Common variables):- Generally a
Sharedvariable may only be initialized with a constant value (its starting value is set at the start of the program in the .data section before any code is run, and so it cannot depend on any variables or functions in it).
- A first exception is a
Sharedvariable of var-len string type, that never can be initialized, even with a constant string (because of its structure with a descriptor in the .data section, but to point to a dynamic memory block).
- A second exception is a
Sharedvariable of user-defined type having a constructor even implicit, that can be initialized with a non-constant value (because it's the constructor code, called when the program starts, which writes the "initial" values into the .data section).
Shared variables defined in the global namespace, add one or preferably two dot(s) as prefix: .SomeSymbol or preferably ..SomeSymbol (or only ..SomeSymbol if inside a With..End With block).Remarks
Differences from QB
- The
Sharedstatement inside scope blocks -- functions, subs, if/thens, and loops -- is not supported. UseDim|Redim|Common|Static Sharedin the main program instead. Or if you're inside a scope block andRedimming a variable or array previously set up withShared, just do aRedimwithoutShared; it will work fine and won't ruin anything.
See also
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
Reference
- Documented in KeyPgShared.html