Peter II schrieb:> lass doch mal das , weg.
Das reicht nicht, die einzelnen character -Konstanten werden auch dann
nicht zu einem String zusammengefügt.
Wenn, dann so:
#define expr_1 "A" "B" "C" "D"
aber das ist ganz sicher nicht das, was der Threadstarter vorhat.
> lass doch mal das , weg.
Nee, das geht nicht; das Beispiel ist vereinfacht.
Ich muß später Asciis in dez, hex und als gewöhnliche alpanum. Zeichen
eintragen. So etwa:
#define DEF_EraseDisplay 0x03, 0x1B, 'D', 'L'
#define DEF_DisableTouch 0x05, 0x1B, 'A', 'L', 0, 1
Prob ist auch, daß ein 'A' nicht als Datentyp char mit Wert 65 sondern
als 32-bit int mit Wert 65 erkannt wird.
Joachim ... schrieb:> Nee, das geht nicht; das Beispiel ist vereinfacht.> Ich muß später Asciis in dez, hex und als gewöhnliche alpanum. Zeichen> eintragen. So etwa:
warum muss es denn eine define sein? zeigt mal etwas mehr vom dem
Problem. Vermutlich gibt es dafür eine bessere lösung
Ich hatte das bisher so gelöst:
in main:
unsigned char ctddark90[] = {0x04, 0x1B, 'Y', 'H', 90};
unsigned char ctddark100[] = {0x04, 0x1B, 'Y', 'H', 100}; //100%
unsigned char ctdcursoroff[] = {0x04, 0x1B, 'T', 'C', 0}; //cursor
off ESC T C 0
unsigned char ctdfont2[] = {0x04, 0x1b, 'Z','F',2}; //ESC Z F n1
Font 2: 6x8 monospaced
Ich brauche ctddark90[] aber in mehreren Dateien und muß es jedesmal
dort mit extern deklarieren. Schöner wäre aber eine einzige Datei mit
#defines die ich einfach inkludiere wo ich sie brauche.
Joachim ... schrieb:> Ich brauche ctddark90[] aber in mehreren Dateien und muß es jedesmal> dort mit extern deklarieren. Schöner wäre aber eine einzige Datei mit> #defines die ich einfach inkludiere wo ich sie brauche.
dann schreibe das "extern ctddark90[] " doch in eine Headerdatei, dann
kannst du sie auch inkludieren.
>Ob das das ist, was der Themenersteller will? Keine Ahnung.
Nee, weil das hier:
#define EXPR_1 ABCD
später so aussieht:
#define ctdEraseTouchArea 0x05, 0x1B, 'A', 'L', '0', '0'
Aber die Idee mit den inkludierten externs ist gut; hätt ich mit meinem
verschlafenen Kopp auch selbst drauf kommen können. Ich löt' zu viel und
programmier zu wenig...
Token Pasting (##):
The token-pasting operator (##) within a macro definition combines two
arguments. It permits two separate tokens in the macro definition to be
joined into a single token.
hilft das eventuell weiter ?
Gruss
> #define DEF_EraseDisplay 0x03, 0x1B, 'D', 'L'
Warum nicht
1
#define ETX "\x03"
2
#define ENQ "\x05"
3
#define ESC "\x1b"
4
5
#define DEF_ERASE_DISPLAY ETX ESC "DL"
6
#define DEF_DISABLE_TOUCH ENQ ESC "AL01"
DEF_ERASE_DISPLAY ist dann ein String Literal, da der Compiler die
aufeinanderfolgenden Strings ETX ESC und "DL" aneinanderfügen muss, da
sie nicht duech , voneinander getrennt sind.
Die Hilfsmakros ETX ENQ bzw. ESC dienen nur dazu, 'benannte'
Einzelstrings zur Verfügung zu haben, die lediglich aus dem jeweiligen
Zeichen mit einem bestimmten Hex-Wert bestehen.