Common

Variable declaration and scope modifier

Syntax
	Common [KeyPgSharedShared] symbolname[()] [AS DataTypeDataType] [, ...]

Description
	Declares a variable which is shared between code modules, including 
	those to be compiled as static and dynamic libraries (DLLs).
	A matching Common statement must appear in all other code modules using 
	the variable. 

	Common variables cannot be initialized.
	Common arrays are always variable-length, and must be defined with an 
	empty parameter list (), and its dimensions set in a later KeyPgDimDim or KeyPgRedimReDim 
	statement.
	Common variables cannot be instances of a user-defined type having a 
	constructor or a destructor even implicit.

	The Shared optional parameter makes the variable global so that it can 
	be used inside KeyPgSubSubs and KeyPgFunctionFunctions, as well as at module level.

Example
	'' common1.bas

	Declare Sub initme()

	Common Shared foo() As Double

	ReDim foo(0 To 2)

	initme()

	Print foo(0), foo(1), foo(2)

	'' common2.bas

	Common Shared foo() As Double

	Sub initme()
	  foo(0) = 4*Atn(1)
	  foo(1) = foo(0)/3
	  foo(2) = foo(1)*2
	End Sub

After compiling the two files like:
fbc common1.bas common2.bas
running common1 produces the output:

	 3.141592653589793           1.047197551196598           2.094395102393195

Platform Differences
	* Windows does not support Common with a dynamic library (compiled with 
	  -dll or -dylib).

Differences from QB
	* The arrays will be always variable-length.
	* blockname is not needed and must be removed because the order of 
	  declaration no longer matters, only the symbol names.
	* Common does not allow to keep the values of certain variables when 
	  chaining programs with KeyPgChainChain.

See also
	* KeyPgDimDim
	* KeyPgEraseErase
	* KeyPgExternExtern
	* KeyPgLboundLBound
	* KeyPgRedimReDim
	* KeyPgPreservePreserve
	* KeyPgSharedShared
	* KeyPgStaticStatic
	* KeyPgUboundUBound
	* KeyPgVarVar

