'''$IF''' is precompiler [[Metacommand|metacommand]], which determines which sections of code inside its blocks are included into the final code for compliing.


{{PageSyntax}}
:[[$IF]] variable = expression THEN
:.
:[[$ELSEIF]] variable = expression THEN
:.
:[[$ELSE]]
:.
:[[$END IF]]


* $IF is the start of a precompiler code block which includes or excludes sections of code from being compiled.
* There is no single line $IF statement.  $IF must be in a valid $IF THEN...$END IF block to work properly.
* Like all other metacommands, you can not use more than one metacommand per line. '''Use of : to separate statements in a single line is not allowed.'''
* Variable names can contain numbers, letters, and periods -- in any order.
* Expressions can contain one set of leading and/or trailing quotes; and any number of numbers, letters, and periods, in any order.
* The precompiler comes with some preset values which can be used to help determine which code blocks to include/exclude for us.  These are: '''WIN''' or '''WINDOWS''' if the user is running QB64 in a Windows environment.  '''LINUX''' if the user is running QB64 in a Linux environment.  '''MAC''' or '''MACOSX''' if the user is running QB64 in a macOS environment.  '''32BIT''' if the user is running a 32-bit version of QB64.  '''64BIT''' if the user is running a 64-bit version of QB64.
* [[$END IF]] denotes the end of a valid precompiler $IF block.
* [[$ELSEIF]] must follow a valid $IF or $ELSEIF statement.
* If [[$ELSE]] is used, it must be used as the last conditional check before $END IF.  $ELSEIF cannot come after $ELSE.
** There can only be one $ELSE in an '''$IF-$ELSEIF-$ELSE-$END IF''' block, and it must be the last block selection before the $END IF.  $ELSEIF cannot follow $ELSE.


{{PageExamples}}
''Example 1:'' 
{{CodeStart}} '' ''
{{Cl|$LET}} ScreenMode = 32
{{Cl|$IF}} ScreenMode = 0 THEN
    {{Cl|CONST}} Red = 4
{{Cl|$ELSEIF}} ScreenMode = 32 THEN
    {{Cl|CONST}} Red = _RGB32(255,0,0)
{{Cl|$END IF}}

{{Cl|COLOR}} Red
{{Cl|PRINT}} "Hello World"
{{CodeEnd}}

''Explanation:'' The same CONST is defined twice inside the program.  Normally, defining a CONST more than once generates an error, but the $IF condition here is choosing which CONST will be inside the final program.

As long as Screenmode is 0, the program will exclude the code where CONST Red is defined as color 4.  If Screenmode is 32, CONST Red will be defined as _RGB32(255, 0, 0).

The [[$LET]] and $IF statements let the programmer control the code that actually gets compiled, while excluding the other blocks completely.


''Example 2:'' 
{{CodeStart}} '' ''
{{Cl|$IF}} WIN THEN
    {{Cl|CONST}} Slash = "\"
{{Cl|$ELSE}}
    {{Cl|CONST}} Slash = "/"
{{Cl|$END IF}}

{{Cl|PRINT}} "The proper slash for your operating system is "; Slash
{{CodeEnd}}

''Explanation:'' For the above, the CONST slash is defined by the automatic internal flags which returns what operating system is being used at compile time. On a Windows PC, the Slash will be the backslash; for any other OS it will be the forward slash.


{{PageSeeAlso}}
* [[$LET]]
* [[Metacommand]]s


{{PageNavigation}}
<
