Was ist bedingte Kompilierung?

Bei der Computerprogrammierung beschreibt die bedingte Kompilierung die Fähigkeit eines Software-Compilers oder Quellcode-Prozessors, bestimmte Befehle oder Codeblöcke basierend auf sprachspezifischen Anweisungen, die technisch nicht zur Kernspezifikation der Programmiersprache gehören, einzuschließen oder zu ignorieren. Die Befehle, die zum Auslösen der bedingten Kompilierung in einem Programm verwendet werden, werden häufig als Pre-Processor-Direktiven bezeichnet, obwohl sie auch als Compiler-Direktiven, bedingte Kommentare oder bedingte Definitionen bezeichnet werden können. Abhängig vom verwendeten Compiler oder der verwendeten Sprache können die bedingten Anweisungen benutzerdefinierte Variablen oder Makros sein oder auch vom Compiler oder vom Betriebssystem festgelegte Systemvariablen. Die bedingte Kompilierung wird häufig zum Konfigurieren eines einzelnen Satzes von Quellcodedateien verwendet, damit sie unter verschiedenen Umgebungen oder Betriebssystemen kompiliert werden können, ohne dass Quelldateien ausgetauscht oder geändert werden müssen.

Die bedingten Definitionen, die zum Testen der bedingten Kompilierung verwendet werden, können von Sprache zu Sprache unterschiedlich sein, sind jedoch im Allgemeinen Makros oder andere Metadatenausdrücke, die außerhalb des Bereichs der normalen Programmvariablen liegen. In Sprachen wie C sind die Variablen normalerweise Makros, die von einem Vorprozessor gelesen werden. In den meisten Fällen ist der Zugriff auf die Makros für den eigentlichen ausführbaren Programmquellcode nicht möglich, obwohl sie in denselben Quelldateien vorhanden sind.

Die Anweisungen, die zum Testen der definierten Bedingungsvariablen verwendet werden, sind rudimentär und folgen der gleichen Logik wie eine if-then-Anweisung. Die grundlegenden Tests, die für die bedingte Kompilierung durchgeführt werden können, sind, ob ein Wert definiert oder nicht definiert ist oder in einigen Fällen, ob zwei definierte Variablen äquivalent sind. Die Variablen oder Makros selbst haben im Allgemeinen keinen signifikanten Wert, da die Direktiven auf ihre Definition achten. Bei einigen Sprachen und Compilern kann der Wert einer definierten Variablen jedoch eine Rolle spielen, wenn sie für den Booleschen Zustand ausgewertet werden.

Wenn ein Compiler auf Anweisungen stößt, die für die bedingte Kompilierung verwendet werden, werden die Anweisungen dahingehend ausgewertet, ob sie als wahr oder falsch getestet werden. Wenn true, wird der Code, der der Direktive folgt, wie gewohnt kompiliert. Andernfalls überspringt der Compiler den in der Direktive enthaltenen Code vollständig. Dies ist anders als bei bedingten logischen Anweisungen im ausführbaren Programmcode selbst, da die Logik in den meisten Fällen interpretiert und kompiliert wird, auch wenn ein Codeblock nicht ausgeführt werden kann. Bei bedingten Pre-Processor-Direktiven wird übersprungener Code niemals einbezogen, interpretiert oder kompiliert. Es sollte auch beachtet werden, dass, sobald der Vorprozessor alle bedingten Variablen und Anweisungen ausgewertet hat, sie nicht mit dem Rest des Programms kompiliert werden, da sie nur dazu gedacht sind, dem Compiler Anweisungen zu geben.

Die bedingte Kompilierung wird am häufigsten zum Ein- oder Ausschließen von Code verwendet, der für ein bestimmtes Betriebssystem oder eine bestimmte Umgebung spezifisch ist. Dies bedeutet, dass Bibliotheken, die in einem Betriebssystem vorhanden sind, bedingt eingeschlossen werden können, wenn die Anweisungen bestimmen, dass das Programm unter diesem Betriebssystem kompiliert wird. Alternativ können die Direktiven auch verwendet werden, um Code basierend auf benutzerdefinierten Variablen einzuschließen oder auszuschließen. Dies kann durchgeführt werden, damit Debugging- oder Profiling-Code nicht in der endgültigen Version eines Programms enthalten ist, oder damit bestimmte Funktionen aktiviert oder deaktiviert werden können, ohne separate Kopien des Codes verwalten zu müssen.

ANDERE SPRACHEN

Hat Ihnen dieser Artikel geholfen? Danke für die Rückmeldung Danke für die Rückmeldung

Wie können wir helfen? Wie können wir helfen?