Identifier Rules
Naming conventions for FreeBASIC symbols.
Description
An identifier is a symbolic name which uniquely identifies a variable, `Type`, `Union`, `Enum`, `Function`, `Sub`, or `Property`, within its scope or `Namespace`.
Identifiers may contain only uppercase and lowercase Latin characters `a`-`z` and `A`-`Z`), digits (`0`-`9`), and the underscore character (`_`). The first character of an identifier must be a letter or underscore, not a digit; if an identifier's length exceeds 128 characters, it will be truncated.
Identifiers are case-insensitive: `FOO` and `foo` (and all other permutations of uppercase and lowercase) refer to the same symbol.
In the -lang qb and -lang fblite dialects, identifiers may have a type suffix at the end indicating one of the standard data types:

- `%` for `Integer`
- `&` for `Long`
- `!` for `Single`
- `#` for `Double`
- `$` for `String`

The use of these suffixes is generally discouraged and is not allowed in the -lang fb dialect (the default).
The alternative is to be explicit - for example, `Dim As Integer foo` or `Dim foo As Integer` instead of `Dim foo%`.
In the -lang qb and -lang fblite dialects, identifiers may contain one or more periods (`.`).
Platform Differences

- Warning:

- For 64-bit compiler only and regarding the choice of user module level procedure identifier names, an additional restriction to the above normal 'Identifier Rules' should also exclude in the global namespace all register names or other symbols issued from the only 'intel' format assembler when it is used (the one by default, no problem with 'att' format), because they causes assembler errors or runtime bugs (due to the 64-bit compiler not decorating module level procedure names).
- Since fbc version 1.09.0, for x86 and x86_64 only (with any assembler format), the use of an inline asm symbol or a global/external/backend symbol induces a warning if such a symbol is used for a module level procedure or a shared variable in the global namespace.
Dialect Differences

- Periods in symbol names are only supported in the -lang qb and -lang fblite dialects.

Differences from QB

- Support for the underscore character (`_`) in symbol names is new to FreeBASIC.

See also

- Variables
- Identifier Look-ups in namespaces and types