Forum: Compiler & IDEs define/macro in string bekommen


von Thomas G. (blasebalg)


Lesenswert?

Geht um AVR GCC...

Ich möchte durch den AVR ein Gerät mit Text füttern. Die 
Zeichencodierung ist normal ASCII, allerdings gibt's Sonderzeichen wie 
Umlaute im Unteren Bereich wo die Steuerzeichen üblicherweise sind... 
'Ä' z.B. ist bei der 4, 'Ö' = 5, 'Ü' = 6

Wie kann ich das denn in meine Stringdefinitionen einfach einbauen ?
1
#define UML_A  4
2
#define UML_O  5
3
#define UML_U  6

So ist klar:
1
static const __flash char text[] = {'G', 'E', 'M', UML_U, 'S', 'E', '\0'};

Bei langen Textstücken hätte ich aber gerne sowas in der Art:
1
static const __flash char text[] = "MEIN GEM", UML_U, "SE SCHMECKT LECKER";

Gruß: Thomas

von Tom (Gast)


Lesenswert?

So?
1
#define U_UML "\x06"
2
const char text[] = "GEM" U_UML "SE";

von Thomas G. (blasebalg)


Lesenswert?

Ah... Darauf bin ich ned gekommen
Besten Dank !

von Markus F. (mfro)


Lesenswert?

gcc kann man mithilfe von iconv auch eigene Zeichensätze unterjubeln und 
dann mit den Compileroptionen -finput-charset und -fexec-charset seinen 
Quelltext beispielsweise als UTF8 auf der Hostmaschine schreiben, aber 
auf dem Zielsystem den angepassten Zeichensatz benutzen lassen.

von Nop (Gast)


Lesenswert?

Tom schrieb:
> So?#define U_UML "\x06"
> const char text[] = "GEM" U_UML "SE";

Kleiner Hinweis: dann ist U_UML kein Zeichen, sondern ein String. Das 
heißt insbesondere, daß Vergleiche nicht mit == gehen.

von Tom (Gast)


Lesenswert?

Nop schrieb:
> daß Vergleiche nicht mit == gehen

Mit Trick schon:
1
if (c == *U_UML)
2
   puts("c ist ein " U_UML);
Ich würde wetten, dass der Compiler daraus das gleiche wie aus "if 
(c==6)" macht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.