Forum: Mikrocontroller und Digitale Elektronik Text in Stringkonstante oder Define


von Myjestic (Gast)


Lesenswert?

Hi ich möchte gerne so etwas realsieren:

#define langer_string "blah blub blah /n   "
                      "blub blah blah /n   "
                      "blah blah blub /n/0 "

Ich möchte wegen der Übersichtlichkeit nicht alles in eine Zeile 
schreiben, sondern schon schön sortiert. Wie kann ich das realisieren, 
dass alles in einer String Variable steht.

Danke schonmal.

Arbeite mit AVR GCC

von Sven P. (Gast)


Lesenswert?

Es steht bereits in einem String, aufeinanderfolgende String-Literale 
werden verbunden.

Sonst such mal nach PROGMEM...

von der mechatroniker (Gast)


Lesenswert?

Ungetestet:
1
#define langer_string "blah blub blah /n   " \
2
                      "blub blah blah /n   " \
3
                      "blah blah blub /n/0 "
Wobei der \ jeweils das letzte Zeichen in der Zeile ist.

von Karl H. (kbuchegg)


Lesenswert?

Myjestic schrieb:
> Hi ich möchte gerne so etwas realsieren:
>
> #define langer_string "blah blub blah /n   "
>                       "blub blah blah /n   "
>                       "blah blah blub /n/0 "
>
> Ich möchte wegen der Übersichtlichkeit nicht alles in eine Zeile
> schreiben, sondern schon schön sortiert. Wie kann ich das realisieren,
> dass alles in einer String Variable steht.

Das ist sowieso keine Variable, sondern ein Präprozessor Makro.
-> Der Text wird überall dort substituiert, wo das Makro verwendet wird.

Und klar kann man auch dieses Makro auf der nächsten Zeile fortsetzen, 
so wie jedes andere Makro auch: In dem man in die letzte Spalte der 
Zeile ein \ schreibt
1
#define langer_string "blah blub blah /n   "  \
2
                      "blub blah blah /n   "  \
3
                      "blah blah blub /n/0 "

von Peter (Gast)


Lesenswert?

> Es steht bereits in einem String, aufeinanderfolgende String-Literale
> werden verbunden.
leider bei einem Define nicht, ein Define muss mal erst sagen das es 
über mehre Zeilen gehen soll.

#define langer_string "blah blub blah /n   "\
                      "blub blah blah /n   "\
                      "blah blah blub /n   "

von der mechatroniker (Gast)


Lesenswert?

Äh und bist du dir mit /n und /0 (sic!) ganz sicher?

von Myjestic (Gast)


Lesenswert?

>Das ist sowieso keine Variable, sondern ein Präprozessor Makro.
> -> Der Text wird überall dort substituiert, wo das Makro verwendet wird.

Danke, das mit mit dem Makro kenne ich. Habe nur hektisch getextet und 
diese grobe Unsachlichkeit begangen :-P

>Äh und bist du dir mit /n und /0 (sic!) ganz sicher?
Öhm ja, warum nicht? Zeilenumbruch, String Ende...


Achso, scheint zu funktionieren, aber ich bekomme die Warnings 
"backslash and newline separated by space"

von Karl H. (kbuchegg)


Lesenswert?

Myjestic schrieb:
>>Das ist sowieso keine Variable, sondern ein Präprozessor Makro.
>> -> Der Text wird überall dort substituiert, wo das Makro verwendet wird.
>
> Danke, das mit mit dem Makro kenne ich. Habe nur hektisch getextet und
> diese grobe Unsachlichkeit begangen :-P
>
>>Äh und bist du dir mit /n und /0 (sic!) ganz sicher?
> Öhm ja, warum nicht? Zeilenumbruch, String Ende...

Öhm, nein.
Zeilenumbruch wäre \n nicht /n.
Und \0 als Stringende brauchst du nicht selber schreiben. Das macht der
Compiler für dich.

>
>
> Achso, scheint zu funktionieren, aber ich bekomme die Warnings
> "backslash and newline separated by space"

Sagten wir schon, dass das \ das letzte Zeichen in der Zeile sein 
muss?

Also, wenn das bisher noch keiner gesagt hat:
Der \ muss das letzte Zeichen in der Zeile sein. Kein weiteres Zeichen 
mehr erlaubt. Noch nicht mal ein Leerzeichen.

von Myjestic (Gast)


Lesenswert?

Schäm. Was 2 Wochen Urlaub so alles anrichten können :-)

Vielen Dank, alle Unklarheiten beseitigt. Geht jetzt alles.

von Vlad T. (vlad_tepesch)


Lesenswert?

in Zussammenhang mit PROGMEM funktioniert die #define Methode nicht.
da wird bei ejder Verwednung ein extra string angelegt.

Deswegen mach lieber direkt "static const char[]"s drauß.
hat ja sonst keine Nachteile zu defines

Edit:
und ohne PROGMEM, machen Strings-Konstanten nur wenig sinn, da sie 
Programm UND Arbeitspeicher belegen.

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.