Text in Stringkonstante oder Define

Gast #1380568
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
#1380585
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 "
Gast #1380586
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   "
Gast #1380642
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"
#1380644
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.
#1380707
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.

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