Extern
Declares a variable, array or object having external linkage
Syntax
`
Extern [ Import ] symbolname[ (subscripts) ] [ Alias "aliasname" ] As DataType [, ...]
`
Parameters
`symbolname`
The name of the variable, array or object.
`aliasname`
An alternate external name for the variable, array or object.
Description
Declares `symbolname` as an external name, meaning it is global to external modules including those to be compiled as static and dynamic libraries (DLLs).
`Extern` only declares variables, arrays and objects, and does not define them (different from `Common` or `Dim`). It also has the effect of making `symbolname` a shared name, meaning it is visible within procedures (see `Shared`). A `symbolname` declared as external name can be (re)defined (using Dim or Redim) only in a single external module.
If `Alias` is used, `aliasname` will be used as the external name rather than `symbolname`, and its case will be preserved.
`Extern` was added in order to support the C libraries.
If `Import` is used, the name will be added to the dynamic library import list so its address can be fixed at run-time.
Example
`
'' extern1.bas
Extern Foo Alias "foo" As Integer
Sub SetFoo
foo = 1234
End Sub
`
`
'' extern2.bas
Declare Sub SetFoo
Extern Foo Alias "foo" As Integer
Dim foo As Integer = 0
SetFoo
Print Foo
`
Output:

     1234

Platform Differences

- Windows does not support `Extern` with a dynamic library (compiled with -dll or -dylib).

Dialect Differences

- Not available in the -lang qb dialect.

Differences from QB

- New to FreeBASIC

See also

- `Extern...End Extern`
- `Common`
- `Dim`
- `Shared`
- `Alias (Name)`
- `Alias (Modifier)`