Syntaxe
Garde les lignes de la première branche dont la condition est vraie et écarte les autres, avant la compilation. Une condition teste des symboles, comme le profil de la cible.
#IF <condition>
<lines>
[#ELSEIF <condition>]
[#ELIF <condition>]
[#ELSE]
#ENDIF
#IFDEF <symbol>
#IFNDEF <symbol>
CompilerIf <condition>
CompilerElseIf <condition>
CompilerElse
CompilerEndIfS’écrit aussi : #IFDEF, #IFNDEF, CompilerIf
Les éléments
| <condition> | Des symboles combinés avec AND (ou &&), OR (ou ||), NOT (ou !) et des parenthèses. #IF DEFINED(X) et #IF DEFINED X testent un symbole. TRUE et FALSE sont admis. Un symbole est vrai quand il est défini. |
|---|---|
| <lines> | N'importe quelles lignes. Dans une branche écartée, elles sont effacées et jamais compilées : elles peuvent même contenir du texte qui n'est pas du BASIC. |
| <symbol> | Un seul nom de symbole. #IFDEF X vaut #IF X, #IFNDEF X vaut #IF NOT X. |
À savoir
- Symboles de chaque profil : l'éditeur (Play, aperçu) a
ENGINE,WEB,DEBUG; l'export HTML aHTML,WEB,RELEASE; l'export Bevy aBEVY,RELEASE. Dans un export, l'exemple ne garde que la ligne de#ELSEIFou de#ELSE. - Un symbole inconnu est simplement faux. Une faute de frappe dans un nom de symbole n'est pas une erreur.
- Ni nombre, ni chaîne, ni comparaison, ni variable, ni constante :
#IF 1et#IF LEVEL = 3sont refusés avecInvalid BASIC compiler condition. La condition est réglée avant qu'aucune variable n'existe. NOTpasse avantAND, etANDavantOR. Ici,&&,||et!sont les mots logiques, pas les opérateurs bit à bit du code ordinaire.- La fin s'écrit
#ENDIFouCompilerEndIf, en un seul mot.#END IFn'est pas reconnu et laisse le bloc ouvert :#IF requires #ENDIF. - Pas de
THEN:#IF DEBUG THENest refusé. - Une directive par ligne. Les blocs s'imbriquent à toute profondeur, mais un bloc s'ouvre et se ferme dans le même fichier.
- Un fichier appelé par
#INCLUDEdans une branche écartée n'est jamais lu et peut manquer. - Directives et symboles ignorent la casse :
#if webfonctionne. Les directives placées dansREMSTART…REMENDou/*…*/sont ignorées. - Le
CompilerIf #PB_Compiler_OS = #PB_OS_Windowsde PureBasic est refusé :CompilerIfne prend que des symboles.
Exemple
#IF ENGINE AND DEBUGConsole("editor build") ' editor build#ELSEIF HTMLConsole("web export")#ELSEConsole("other target")#ENDIF#IFNDEF BEVYConsole("not Bevy") ' not Bevy#ENDIFDans le manuel : Le préprocesseur