Enum
Declares an enumerated type.
Syntax
`
Enum [typename [ Explicit ] ]
symbolname [= expression] [, ...]
...
End Enum
`
Parameters
`typename`
Name of the `Enum`
`symbolname`
Name of the constant
`expression`
A constant expression
`Explicit`
Requires that symbols must be explicitly referred to by `typename.symbolname`
Description
`Enum`, short for enumeration, declares a list of symbol names that correspond to discrete values. If no initial value is given, the first item will be set to `0`. Each subsequent symbol has a value one more than the previous unless `expression` is given.
Symbols may be each on their own line, or separated on a single line by commas.
An `Enum` is a useful way of grouping together a set of related `Const`ants. A symbol can be accessed like a constant, e.g: `a = symbolname`. But if the name clashes with another symbol, it must be resolved using `typename.symbolname`. This resolution method is always required if you make the enum `Explicit`.
A non-`Explicit` `Enum` declared inside an `Extern ... End Extern` block will add its constants to the parent namespace directly, as in C, instead of acting as a namespace on its own. It disallows the `typename.symbolname` style of access, and the constants may conflict with other symbols from the parent namespace.
`Enum` can not contain any member procedure or member data (only symbols), but it can be included (named or unnamed) in a `Type` by having.
An `Enum` instance can be passed, as any user defined instance, to a procedure (including for the definition of `Overload`ed operators).
The size of an `Enum` instance will be always that of an `Integer` (no matter how many defined symbols are just declarations for the compiler assignment).
Example
`
Enum MyEnum
option1 = 1
option2
option3
End Enum
Dim MyVar As MyEnum
MyVar = option1
Select Case MyVar
Case option1
Print "Option 1"
Case option2
Print "Option 2"
Case option3
Print "Option 3"
End Select
`
You can reference formerly declared symbol names within the same enum:
`
Enum MyEnum
option1 = 1
option2
option3
__
MAX_VALUE = __ -1
End Enum
Print "Option #1:", MyEnum.option1
Print "Option #2:", MyEnum.option2
Print "Option #3:", MyEnum.option3
Print "Max Value:", MyEnum.MAX_VALUE
`
Output:

    Option #1:     1
    Option #2:     2
    Option #3:     3
    Max Value:     3

Dialect Differences

- Explicit Enum not available in the -lang qb dialect unless referenced with the alias `__Explicit`.

Differences from QB

- New to FreeBASIC

See also

- `Const`
- `Operator`
- `Table with variable types overview, limits and suffixes`