mirror of
https://github.com/QB64Official/qb64.git
synced 2024-09-28 11:17:47 +00:00
84 lines
3.8 KiB
Text
84 lines
3.8 KiB
Text
'''$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. 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.
|
|
** '''VERSION''', which is set to the version of the QB64 compiler. This is a number and can be ordered, see example below.
|
|
* Special values '''DEFINED''' and '''UNDEFINED''' can be used to check whether a precompiler variable has already been assigned a value. Useful for code in libraries which may be repeated.
|
|
* [[$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.
|
|
|
|
|
|
''Example 3:''
|
|
{{CodeStart}} '' ''
|
|
{{Cl|$IF}} VERSION < 1.5 THEN
|
|
{{Cl|$ERROR}} Requires QB64 version 1.5 or greater
|
|
{{Cl|$END IF}}
|
|
{{CodeEnd}}
|
|
|
|
''Explanation:'' VERSION is a predefined variable that holds the QB64 compiler version. If we know our program needs features only available above a certain version, we can check for that and give the user a helpful error message instead of a confusing error elsewhere in the program.
|
|
|
|
|
|
{{PageSeeAlso}}
|
|
* [[$LET]]
|
|
* [[$ERROR]]
|
|
* [[Metacommand]]s
|
|
|
|
|
|
{{PageNavigation}}
|