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
Es steht bereits in einem String, aufeinanderfolgende String-Literale werden verbunden. Sonst such mal nach PROGMEM...
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 "
|
> 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 "
>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.
Schäm. Was 2 Wochen Urlaub so alles anrichten können :-) Vielen Dank, alle Unklarheiten beseitigt. Geht jetzt alles.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.