C / C ++: Inhärente Mehrdeutigkeit des "\ xNNN" -Formats in Literalfolgen

8

Betrachten Sie diese zwei Zeichenfolgen:

%Vor%

Wenn Sie dies lesen, erwarten Sie, dass beide Zeichenfolgenliterale bis auf ein Zeichen gleich sind - ein 'x' anstelle eines 'b' .
Es stellt sich heraus, dass dies nicht der Fall ist. Die erste Zeichenfolge wird kompiliert nach:

%Vor%

und das zweite ist eigentlich:

%Vor%

Sie sind nicht gleich lang!
Ja, das 'b' wird von der hexadezimalen Repräsentation ( '\xNNN' ) verbraucht.

Zumindest könnte dies zu Verwirrung und subtilen Fehlern bei handgeschriebenen Strings führen (Sie könnten argumentieren, dass Unicode-Strings nicht in den Code-Body gehören)

Aber das ernstere Problem, und das, dem ich gegenüberstehe, ist in automatisch generiertem Code. Es scheint einfach keine Möglichkeit zu geben, dies auszudrücken: {'x', 'y', 0x588, 'b', 'l', 'a' } als eine literale Zeichenkette, ohne die ganze Zeichenkette in hexadezimale Darstellung zu schreiben, was verschwenderisch und unlesbar ist.

Irgendeine Idee von einem Weg darum?
Was ist der Sinn in der Sprache, die sich so verhält?

    
shoosh 14.03.2013, 22:52
quelle

1 Antwort

14

Ein einfacher Weg besteht darin, die String-Literalkompilierung für die Kompilierungszeit zu verwenden, also:

%Vor%     
Cheers and hth. - Alf 14.03.2013 22:54
quelle

Tags und Links