Ja, das ist möglich. Weitere Informationen zur Stringifizierung finden Sie in GCC cpp
documentation.
Ich korrigierte meine Antwort dank Wojtek Surowkas
Verwenden Sie dann MY_STRINGIFY(GPIO_PORT_D|GPIO_PIN_IRQ_RISING|GPIO_PIN5)
, was viel besser funktioniert, wenn Sie ein enum
verwenden, um die Konstanten zu definieren, z. B.
Natürlich funktioniert das nicht so, wie Sie wollen, wenn Sie GPIO_PORT_D
als Makro benötigen, z. weil es zu einem nicht konstanten literalen Ausdruck erweitert wird (wie eine Variable oder ein Zugriff auf ein Feld einer globalen Struktur usw.).
Als Gegenbeispiel:
%Vor% wird auf "1|2"
nicht auf "FOO|BAR"
erweitert, wenn Sie die beiden #define
-s für FOO
und für BAR
entfernen und sie durch
Sie erhalten wirklich die Erweiterung "FOO|BAR"
, wie Sie wollen. Überprüfen Sie mit gcc -C -E
...
Auch:
%Vor% wird als "(FOO|BAR)"
erweitert. Wenn Sie jedoch #define
für FOO
und für BAR
verwenden, erhalten Sie die Erweiterung "(1|2)"
.
Vielleicht könnten Sie Ihre eigene Kopfzeile hinzufügen, nachdem Sie die externe Kopfzeile, die GPIO_PORT_D
etc ... definiert, als literale Konstanten hinzufügen, etwa wie folgt:
und dann erhalten Sie mehr lesbare stringifizierte Konstanten (aber nicht genau das, wovon Sie träumen).
Wenn Sie solche zwei Definitionen haben
%Vor%MY_STRINGIFY tut was Sie wollen - erweitert sein Argument und fügt Anführungszeichen nach.
Tags und Links macros c c-preprocessor stringification