5.6 Gambas-Präprozessor

Betrachtet man diesen Quelltext genauer, dann entdeckt man im Quelltext Präprozessor-Direktiven, die mit einem #-Zeichen beginnen:

  #If Debug 
      If Box Then ' Rechteck zeichnen, in dem der Text stehen soll 
         Cairo.Rectangle(Box.X, Box.Y, Box.Width, Box.Height) 
         Cairo.Dash = [5] 
         Cairo.Stroke() 
      Endif 
  #Endif 

Gambas hat einen rudimentären Präprozessor. Das ist eine Einheit, die der lexikalischen Analyse – dem ersten Schritt bei der Kompilierung – vorgeschaltet ist. Was der Gambas-Präprozessor leistet, finden Sie in der Gambas-Dokumentation unter http://gambaswiki.org/wiki/lang/.if.

Eine Präprozessor-Direktive hat diese Syntax:

#If Preprocessor-Expression ... [ #Else If Preprocessor-Expression ... ] [ #Else ... ] #Endif 

Eine #IF … #EndIf-Präprozessor-Direktive erlaubt die bedingte Kompilierung von Quelltext. Ein Präprozessor-Ausdruck ist ein rudimentärer boolscher Ausdruck, der folgendes einschließen kann:


Das sind gültige Präprozessor-Konstanten:

KonstanteWertErlaubte Vergleichsoperatoren
SystemBetriebssystem =, <>
Architecture oder ArchCPU-Architektur =, <>
Version oder GambasCompiler-Version =, <>, <, ⇐, >, >=
DebugDebugging-Informationen eingeschaltet keine
TrueWert 'wahr' keine
FalseWert 'falsch' keine

Tabelle 5.6.1 : Übersicht zu den Präprozessor-Konstanten

Im u.a. Beispiel-Quelltext wird nur eine der vier 'Print'-Anweisungen kompiliert:

Public Sub Main() 
  #If System = "Linux" 
      #If Architecture = "x86_64" 
          Print "Linux 64 bits" 
      #Else 
          Print "Linux 32 bits" 
      #Endif 
  #Else If System = "FreeBSD" 
      Print "FreeBSD ?" 
  #Else 
      Print "Other !?" 
  #Endif 
End ' Main() 

Beachten Sie diesen Hinweis:

Durch die Verwendung der bedingten Kompilierung auf der Basis 'Betriebssystem' oder 'CPU-Architektur' wird bei der Kompilierung eine ausführbare Datei generiert, die spezifisch für das Betriebssystem oder die CPU-Architektur ist. Das ist in der Regel aber keine gute Idee. Versuchen Sie statt dessen, zur Laufzeit durch die Prüfung der Werte 'System.Family' und 'System.Architecture' so viel wie möglich vom Betriebssystem oder der CPU-Architektur in Ihrem Code zu erkennen.

Download

Artikel

Download