Heim > Backend-Entwicklung > C++ > Wie kann ich mit Kommas in Makroargumenten in C/C umgehen?

Wie kann ich mit Kommas in Makroargumenten in C/C umgehen?

Linda Hamilton
Freigeben: 2024-12-17 06:29:25
Original
917 Leute haben es durchsucht

How Can I Handle Commas in Macro Arguments in C/C  ?

Kommas innerhalb von Makros in C/C

Bei der Verwendung von Makros, die mehrere Argumente akzeptieren, können Schwierigkeiten auftreten, insbesondere wenn die Argumente Kommas enthalten. Betrachten Sie das folgende Beispiel:

#define FOO(type, name) type name
Nach dem Login kopieren

Während es einfach ist, das Makro mit Argumenten wie den folgenden zu verwenden:

FOO(int, int_var);
Nach dem Login kopieren

Es treten Probleme auf, wenn mit komplexen Argumenten mit Kommas umgegangen wird, wie zum Beispiel:

FOO(std::map<int, int>, map_var); // Error: 3 arguments passed to macro 'FOO', which takes only 2
Nach dem Login kopieren

Um dieses Problem zu beheben, könnte man eine benutzerdefinierte Typdefinition einführen:

typedef std::map<int, int> map_int_int_t;
FOO(map_int_int_t, map_var); // Compiles successfully
Nach dem Login kopieren

Dies jedoch Dem Ansatz mangelt es an Ergonomie und er erfordert zusätzliche Typkonvertierungen.

Eine alternative Lösung besteht darin, ein Makro mit dem Namen COMMA zu definieren:

#define COMMA ,
Nach dem Login kopieren

Mit dieser Definition können komplexe Argumente mithilfe des COMMA-Makros an das Makro übergeben werden , zum Beispiel:

FOO(std::map<int COMMA int>, map_var);
Nach dem Login kopieren

Diese Methode ermöglicht auch die Stringifizierung von Argumenten, wie im Folgenden dargestellt Code:

#include <cstdio>
#include <map>
#include <typeinfo>

#define STRV(...) #__VA_ARGS__
#define COMMA ,
#define FOO(type, bar) bar(STRV(type) \
    " has typeid name \"%s\"", typeid(type).name())

int main()
{
    FOO(std::map<int COMMA int>, std::printf);
}
Nach dem Login kopieren

Dieser Code gibt Folgendes aus: „std::map hat den Typ-ID-Namen „St3mapIiiSt4lessIiESaISt4pairIKiiEEE“.“

Das obige ist der detaillierte Inhalt vonWie kann ich mit Kommas in Makroargumenten in C/C umgehen?. 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