#define in einen String eintragen

#3277089
Lesenswert?

Moin,
wie kann ich mehrere #defines nacheinander in einen String oder ein 
Array eintragen?

1
#define expr_1    'A', 'B', 'C', 'D'
2
#define expr_2    'E', 'F', 'G', 'H', 'I', 'J'
3
#define expr_3    'K', 'L', 'M'
4

5
  char *string_1;
6
  string_1 = "ABCD";
7
  
8
  char *string_2;
9
  string_2 = expr_1;
10

11
  printf("\r%s", string_1); //geht
12
  printf("\r%s", string_2); //geht nicht
#3277109
Lesenswert?

> 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.
#3277122
Lesenswert?

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
Lesenswert?

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.
#3277131
Lesenswert?

Sowas hier geht:

1
#define STR_HELPER(x) #x
2
#define STR(x) STR_HELPER(x)
3

4
#define EXPR_1    ABCD
5
#define EXPR_2    1234
6
#define EXPR_3    "test" STR(EXPR_1) STR(EXPR_2)
7

8
#include <stdio.h>
9

10
int main()
11
{
12
    char* string;
13
    string = EXPR_3;
14

15
    printf("%s\n", string);
16
    
17
    return 0;
18
}

Ob das das ist, was der Themenersteller will? Keine Ahnung.
#3277162
Lesenswert?

>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...
#3277440
Lesenswert?

> #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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren