Escape Sequenz "\xhh" Bug im GCC???

OP Persönliche Seite #539521
Lesenswert?
• ▲
▼
Hallo,

ich habe einen eigenen Zeichensatz für mein GLCD erstellt und möchte nun 
konstante Strings anlegen. Für das 'ü' muss ich bei meinem Zeichensatz 
0x5d verwenden.
Will ich nun den String "Zurück" konstant im Flash abgelegen würde man 
ja schreiben:
1
char PROGMEM string[] = "Zur\x5Dck";

\x ist ja die Escape-Sequenz für einen HEX-Code, aber wieviele Stellen 
wertet der GCC als HEX aus?
Im obigen Beispiel scheint es so, als würde das c auch noch mit als 
HEX-Ziffer ausgewertet werden. Jedenfalls zeigt meine print-Funktion 
weder das korrekte 'ü' noch das darauf folgende 'c' an.

Schreibe ich
1
char PROGMEM string[] = "\x5D\x5D\x5D\x5D";
werden korrekt "üüüü" angezeigt.

Ist das nun ein Bug im GCC?

Laut ANSI-C sind das meiner Meinung nach nur 2 Ziffern:
http://www.liquifried.com/docs/useful/Cescapeseq.html

Gruß,
Dominik
#539609
Lesenswert?
• ▲
▼
Kaut K&R darf die Anzahl der Zeichen hinter \x beliebig lang sein. 
Allerdings darf dabei Müll rauskommen, wenn der Wert nicht mehr 
dargestellt werden kann (also z.B. wen der Wert nicht mehr in int 
passt).
Genau weiß ich es auch nicht, aber anscheined ist das korrekt was der 
Compiler macht.

Woher soll der Compiler bei "Zur\x5Dck"; wissen, ob das Hex Zeichen bei 
5, bei D oder beim c endet ?
Daher verwendet man um sicher zu gehen den Weg mit den mehreren "".
Gast #539624
Lesenswert?
• ▲
▼
ANSI: "Even if eight bits are used for objects that have type char , the 
construction '\x123' specifies an integer character constant containing 
only one character."

Hintergrund: Die Breite eines "chars" ist seitens ANSI nicht auf 8 Bits 
festgelegt. Die Interpretation eines Strings darf jedoch nicht davon 
abhängen, ob das nun 8, 9 oer 12 Bits sind.
Moderator Persönliche Seite #539650
Lesenswert?
• ▲
▼
Ich vermute, dass ANSI-C89 eigens dafür die `string concetanation',
also das automatische Verketten der Strings "abc" "def" zu "abcdef"
erfunden hat.  Das gab's davor (also es nur oktale ESC-Sequenzen
gab) nämlich noch nicht.  Ist aber auch für andere Dinge ganz nett,
z. B. kann man das dann auch etwas lesefreundlicher aufschreiben:
1
#define ue "\x5D"
2

3
...
4

5
  puts("Zur"ue"ck");

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.