Identifier Rules

Naming conventions for FreeBASIC symbols.

Description
	An identifier is a symbolic name which uniquely identifies a ProPgVariablesvariable, 
	KeyPgTypeType, KeyPgUnionUnion, KeyPgEnumEnum, KeyPgFunctionFunction, KeyPgSubSub, or KeyPgPropertyProperty, within its ProPgVariableScopescope or 
	KeyPgNamespace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 CompilerOptlang-lang qb and CompilerOptlang-lang fblite dialects, identifiers may have a type 
	suffix at the end indicating one of the standard data types:

	* % for KeyPgIntegerInteger
	* & for KeyPgLongLong
	* ! for KeyPgSingleSingle
	* # for KeyPgDoubleDouble
	* $ for KeyPgStringString

	The use of these suffixes is generally discouraged and is not allowed in 
	the CompilerOptlang-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 CompilerOptlang-lang qb and CompilerOptlang-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 CompilerOptlang-lang qb and 
	  CompilerOptlang-lang fblite dialects.

Differences from QB
	* Support for the underscore character (_) in symbol names is new to 
	  FreeBASIC.

See also
	* ProPgVariablesVariables
	* ProPgIdentifierLookupIdentifier Look-ups in namespaces and types

