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
CompilerEndIf

S’é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 a HTML, WEB, RELEASE ; l'export Bevy a BEVY, RELEASE. Dans un export, l'exemple ne garde que la ligne de #ELSEIF ou 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 1 et #IF LEVEL = 3 sont refusés avec Invalid BASIC compiler condition. La condition est réglée avant qu'aucune variable n'existe.
  • NOT passe avant AND, et AND avant OR. Ici, &&, || et ! sont les mots logiques, pas les opérateurs bit à bit du code ordinaire.
  • La fin s'écrit #ENDIF ou CompilerEndIf, en un seul mot. #END IF n'est pas reconnu et laisse le bloc ouvert : #IF requires #ENDIF.
  • Pas de THEN : #IF DEBUG THEN est 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 #INCLUDE dans une branche écartée n'est jamais lu et peut manquer.
  • Directives et symboles ignorent la casse : #if web fonctionne. Les directives placées dans REMSTART … REMEND ou /* … */ sont ignorées.
  • Le CompilerIf #PB_Compiler_OS = #PB_OS_Windows de PureBasic est refusé : CompilerIf ne 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#ENDIF
Dans le manuel : Le préprocesseur