Heim > Backend-Entwicklung > C++ > Können wir in der C/C-Vorverarbeitung rekursive Makros erstellen?

Können wir in der C/C-Vorverarbeitung rekursive Makros erstellen?

Barbara Streisand
Freigeben: 2024-12-09 11:47:16
Original
207 Leute haben es durchsucht

Can We Create Recursive Macros in C/C   Preprocessing?

Können wir rekursive Makros haben?

Während Makros nicht direkt rekursiv erweitert werden, gibt es clevere Techniken, um eine ähnliche Funktionalität zu erreichen.

Workaround für Rekursive Makros

Wir können verzögerte Ausdrücke und Indirektionen verwenden, um den Präprozessor daran zu hindern Deaktivieren des Makros während der Erweiterung. Hier ist ein Beispiel für die Erstellung eines rekursiven PR-Makros:

#define EMPTY(...)
#define DEFER(...) __VA_ARGS__ EMPTY()
#define OBSTRUCT(...) __VA_ARGS__ DEFER(EMPTY)()
#define EXPAND(...) __VA_ARGS__

#define pr_id() pr
#define pr(n) ((n==1)? 1 : DEFER(pr_id)()(n-1))
Nach dem Login kopieren

Dieses Makro wird wie folgt erweitert:

pr(5) -> ((5==1)? 1 : pr_id()(4))
EXPAND(pr(5)) -> ((5==1)? 1 : ((4==1)? 1 : pr_id()(3)))
Nach dem Login kopieren

Beispiel für ein rekursives Wiederholungsmakro

Mit diesen Techniken Wir können ein rekursives REPEAT-Makro erstellen:

#define REPEAT(count, macro, ...) \
    WHEN(count) \
    ( \
        OBSTRUCT(REPEAT_INDIRECT) () \
        ( \
            DEC(count), macro, __VA_ARGS__ \
        ) \
        OBSTRUCT(macro) \
        ( \
            DEC(count), __VA_ARGS__ \
        ) \
    )
#define REPEAT_INDIRECT() REPEAT

#define M(i, _) i
EVAL(REPEAT(8, M, ~)) // 0 1 2 3 4 5 6 7
Nach dem Login kopieren

Anwendbarkeit und Einschränkungen

Obwohl diese Problemumgehungen rekursive Makros ermöglichen, ist es wichtig zu beachten, dass sie komplex sein können und möglicherweise nicht in allen Fällen funktionieren. Es wird empfohlen, die Verwendung rekursiver Makros mit Vorsicht anzugehen und gegebenenfalls Alternativen wie Funktionen oder Vorlagen-Metaprogrammierung in Betracht zu ziehen.

Das obige ist der detaillierte Inhalt vonKönnen wir in der C/C-Vorverarbeitung rekursive Makros erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage