Text in Stringkonstante oder Define

Gast #1380568
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
Gast
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.
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
> 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
>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"
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.
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.