Compiler-Anweisung

Eine Compiler-Anweisung (englisch compiler directive oder pragma) ist eine in den Quelltext eingefügte Steueranweisung für den Compiler. Der Umfang und die Syntax von Compiler-Anweisungen sind von der Programmiersprache und teilweise auch vom gewählten Compiler abhängig.

Beispiele

In der Programmiersprache Algol 68 werden Compiler-Direktiven zwischen pr und pr oder zwischen pragmat und pragmat eingeschlossen.[1] Dies ist der Ursprung des Begriffs Pragmat.

C-Compiler verwenden einen C-Präprozessor, der Compiler-Direktiven interpretiert. Beispielsweise weist #include <foo.h> den Präprozessor an, den Inhalt der Datei foo.h an dieser Stelle im Quelltext einzufügen. Mit der Anweisung #pragma eigenschaft wird eine Eigenschaft dem Compiler angezeigt. Ein Beispiel für eine Eigenschaft ist die Annotation eines parallelisierbaren Code-Blocks, falls der C-Compiler den OpenMP-Standard unterstützt:

#pragma omp parallel for reduction(+:c)
 for (int i = 0; i < length; ++i)
     c += a[i]*b[i];

In der Programmiersprache Pascal werden Compiler-Direktiven als spezielle Kommentare definiert. Kommentare, deren erstes Zeichen ein $ ist, werden als Direktive interpretiert. Beispielsweise schaltet {$Q+} die Codegenerierung von Indexüberprüfungen von Arrayzugriffen ein.

In der Programmiersprache Ada werden Compiler-Direktiven durch das Schlüsselwort pragma eingeleitet. So wird z. B. mit pragma OPTIMIZE(TIME); die Programmoptimierung gesteuert.

Der Haskell-Compiler GHC unterstützt das Setzen von Kommandozeilen-Optionen auch in der Quelltextdatei über Compiler-Direktiven. Ein Beispiel ist die Aktivierung von ghc-Haskell-Spracherweiterungen, die mit der Direktive {-# OPTIONS_GHC -fglasgow-exts #-} angefordert wird.

In der SAP-Programmiersprache ABAP werden Pragmas verwendet, um Warnungen verschiedener Prüfwerkzeuge auszublenden. Der Programmierer erklärt damit, dass er die betreffende Syntax bewusst verwendet und den konkreten Einsatz auf Unbedenklichkeit geprüft hat. So können etwa performance-kritische Anweisungen hingenommen werden, wenn im konkreten Einsatzzweck keine langen Laufzeiten zu erwarten sind oder aber bewusst toleriert werden können.

Einzelnachweise

  1. Revised Report on the Algorithmic Language ALGOL 68. (Memento vom 17. Oktober 2007 im Internet Archive)