2015-08-04 4 views
5

Ist es möglich, ein GCC-Makro zu schreiben, das ein String-Literal-Argument destringiert? Ich weiß das Gegenteil ist möglich mit #. Kann es umgekehrt werden?Destringierung im GCC-Preprocessor

Beispielsweise wertet __func__ auf den Namen der aktuellen Funktion in Form eines Stringliteral. Kann ich die doppelten Anführungszeichen entfernen?

+3

['__func__' ist kein Makro] (http://stackoverflow.com/questions/15305310/predefined-macros-for-function-name-func) – Banex

+0

Ich glaube nicht, dass es möglich ist und Sie können ' t Spare ein Makro definieren, um den Funktionsnamen zu halten. –

Antwort

6

Nein, es ist nicht möglich, "foo" in foo mit dem Standard-C/C++ - Präprozessor zu konvertieren. Wenn Sie dies unbedingt benötigen, müssen Sie ein externes Vorverarbeitungsprogramm erstellen, ähnlich wie es Qt mit seinem Tool moc macht.

Nicht ganz beim Thema, aber die D Sprache hat genau diese Funktionalität - es mixins genannt wird. Sie können zur Kompilierungszeit beliebigen Code zur Zeichenfolgenverarbeitung ausführen und das Ergebnis mit dem Schlüsselwort mixin in Ihre Quelldatei einfügen.

+0

Danke. Gute Antwort! – PSkocik

Verwandte Themen