Ich möchte ein String-Literal und Char-Literal concattieren. Da es syntaktisch falsch ist, gibt "abc" 'd' "efg"
einen Compilerfehler aus:
x.c: 4: 24: Fehler: erwartet ',' oder ';' vor 'd'
Inzwischen muss ich snpift (unnötig) verwenden, obwohl der Wert von string literal und das char literal zur Kompilierzeit bekannt sind.
Ich habe es versucht
%Vor% aber es funktioniert nicht, da der Null-Terminator von S
nicht entfernt wird. (Neben Compilerwarnungen geben.)
Gibt es eine Möglichkeit, ein zu verwendendes Makro zu schreiben?
"abc" MACRO('d') "efg"
oder MACRO1(MACRO2("abc", 'd'), "efg")
oder MACRO("abc", 'd', "efg")
? Falls jemand fragt, warum ich das will: Das Char-Literal kommt aus einer Bibliothek und ich muss den String als Statusmeldung ausgeben.
Wenn Sie mit den einfachen Anführungszeichen leben können, die mit ihm enthalten sind, können Sie die Zeichenfolge verwenden:
%Vor%Abhängig von dem Kontext, der geeignet sein mag oder nicht, aber so weit es überzeugt, auf diese Weise tatsächlich ein String-Literal zu sein, ist es die einzige Möglichkeit, die ohne Formatierung zur Laufzeit in den Sinn kommt.
C lässt Sie nur String-Literale verketten. Eigentlich ist nichts mit snprintf()
falsch. Sie könnten auch strcpy()
:
Sie können auch eine riesige switch
-Anweisung verwenden, um diese Einschränkung zu überwinden:
... aber ich weigere mich, irgendeine Urheberschaft zu beanspruchen.
Um es kurz zu machen, bleiben Sie einfach bei snprintf()
.
Tags und Links macros string c char concatenation