String-Literal mit char-Literal verketten

8

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.

    
kay 28.03.2012, 16:54
quelle

4 Antworten

6

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.

    
FatalError 28.03.2012 17:16
quelle
3

Versuchen Sie es. Es verwendet den C-Makrotrick von Doppelmakros, so dass das Makroargument die Möglichkeit hat, zu expandieren, bevor es mit einem String versehen wird.

%Vor%     
Zan Lynx 28.03.2012 17:25
quelle
3

Ich habe eine GCC-spezifische Lösung gefunden, die ich nicht so gerne mag, da% CONCAT nicht verschachtelt werden kann.

%Vor%

Ссылка

    
kay 29.03.2012 05:20
quelle
2

C lässt Sie nur String-Literale verketten. Eigentlich ist nichts mit snprintf() falsch. Sie könnten auch strcpy() :

verwenden %Vor%

Sie können auch eine riesige switch -Anweisung verwenden, um diese Einschränkung zu überwinden:

%Vor%

... aber ich weigere mich, irgendeine Urheberschaft zu beanspruchen.

Um es kurz zu machen, bleiben Sie einfach bei snprintf() .

    
Philip 28.03.2012 17:05
quelle

Tags und Links