mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Text in Stringkonstante oder Define


Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es steht bereits in einem String, aufeinanderfolgende String-Literale 
werden verbunden.

Sonst such mal nach PROGMEM...

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ungetestet:
#define langer_string "blah blub blah /n   " \
                      "blub blah blah /n   " \
                      "blah blah blub /n/0 "
Wobei der \ jeweils das letzte Zeichen in der Zeile ist.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
#define langer_string "blah blub blah /n   "  \
                      "blub blah blah /n   "  \
                      "blah blah blub /n/0 "

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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   "

Autor: der mechatroniker (Gast)
Datum:

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

Autor: Myjestic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Myjestic (Gast)
Datum:

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

Vielen Dank, alle Unklarheiten beseitigt. Geht jetzt alles.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.