C-Präprozessoren zur Eliminierung von bedingten Blöcken
Im Bereich der C-Programmierung besteht häufig die Notwendigkeit, toten Code auf der Grundlage von Definitionen zu eliminieren oder undefinierte Makros. Während der Standard-C-Präprozessor begrenzte Fähigkeiten zur bedingten Kompilierung bietet, erfordern erweiterte Anforderungen spezielle Tools. In diesem Artikel wird ein C-Präprozessor untersucht, der einen solchen Bedarf erfüllen kann.
Stellen Sie sich das Szenario vor, in dem eine Codebasis bedingte Blöcke enthält wie:
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
Ein Präprozessor mit der gewünschten Funktionalität würde Befehlszeilenargumente akzeptieren, um definierte oder undefinierte Makros anzugeben, z. B. „-DNAME1“ oder „-UNAME1“. Das Ausführen des Befehls mit „-DNAME1“ würde die folgende Ausgabe erzeugen:
#define ALBUQUERQUE "ambidextrous"
Andererseits würde das Ausführen des Befehls mit „-UNAME1“ Folgendes erzeugen:
#define PHANTASMAGORIA "ghostly"
Komplexer Auch Szenarien mit mehreren Bedingungen und verschachtelten Blöcken können präzise gehandhabt werden. Betrachten Sie das folgende Beispiel:
#ifdef USE_VOID #ifdef PLATFORM1 #define VOID void #else #undef VOID typedef void VOID; #endif /* PLATFORM1 */ typedef void * VOIDPTR; #else typedef mint VOID; typedef char * VOIDPTR; #endif /* USE_VOID */
Das Ausführen des Befehls mit „-DUSE_VOID -UPLATFORM1“ würde zu der folgenden Ausgabe führen:
#undef VOID typedef void VOID; typedef void * VOIDPTR;
Zum Schluss noch ein Beispiel mit verschachtelten Bedingungen:
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Die Übergabe des Arguments „-UOLDUNIX“ würde produzieren:
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Empfohlene Lösung
Basierend auf den Empfehlungen im Originalthread zeichnet sich sunifdef als robustes und effektives Pre aus -Prozessor, der in der Lage ist, toten Code basierend auf definierten/undefinierten Makros zu entfernen. Es wurde ausgiebig und mit großem Erfolg eingesetzt und hat Tausende unnötiger bedingter Blöcke beseitigt.
Das obige ist der detaillierte Inhalt vonWie kann ein C-Präprozessor toten Code basierend auf definierten/undefinierten Makros eliminieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!