{{fbdoc item="title" value="Identifier Rules"}}----
Naming conventions for ""FreeBASIC"" symbols.

{{fbdoc item="desc"}}
	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 (##.##).

{{fbdoc item="target"}}
	- 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.

{{fbdoc item="lang"}}
	- Periods in symbol names are only supported in the //[[CompilerOptlang|-lang qb]]// and //[[CompilerOptlang|-lang fblite]]// dialects.

{{fbdoc item="diff"}}
	- Support for the underscore character (##_##) in symbol names is new to ""FreeBASIC"".

{{fbdoc item="see"}}
	- [[ProPgVariables|Variables]]
	- [[ProPgIdentifierLookup|Identifier Look-ups in namespaces and types]]

{{fbdoc item="back" value="CatPgProgrammer|Programmer's Guide"}}