{{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.

	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 symbols is generally discouraged in 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="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]]

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