Moin, wie kann ich mehrere #defines nacheinander in einen String oder ein Array eintragen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
|
Anzeige
|
#define in einen String eintragenMoin, wie kann ich mehrere #defines nacheinander in einen String oder ein Array eintragen?
Gast
#3277091
lass doch mal das , weg. 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.
Gast
#3277117
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.
Gast
#3277124
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. >dann schreibe das "extern ctddark90[] " doch in eine Headerdatei, dann >kannst du sie auch inkludieren. Gute Idee, das probier ich. Sowas hier geht:
Ob das das ist, was der Themenersteller will? Keine Ahnung. >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
Gast
#3277171
Harald Stinux schrieb: > hilft das eventuell weiter ? nein, weil er keine DEFINES verbinden will. > #define DEF_EraseDisplay 0x03, 0x1B, 'D', 'L'
Warum nicht
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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|