Initialisierung über mehrere Zeilen verteilen

Gast #2807396
Lesenswert?

Hi,

ich habe auf dem AVR NET IO in der sendmail.c vom Ulrich Radig das 
"Problem" das ich bei dem
1
PROGMEM char SMTP_TEXT[] = "From: \"AVR-NET-IO\" <"__SMTP_MAIL_FROM__">\r\nTo:<"__SMTP_MAIL_TO__">\r\nSubject: Test_Email!\r\n\r\nHallo\r\nNa wie gehts? Mir gehts prima.";

so eine lange Initialiserung habe, dass ich die gerne über mindestens 
zwei Zeilen machen würde, doch ich weiss nicht wie das geht.
Kann mir da einer Helfen?

Gruss der Bernd
Gast #2807402
Lesenswert?

1
PROGMEM char SMTP_TEXT[] = "
2
F\
3
r\
4
o\
5
m\
6
:\
7
 \
8
\"\
9
A\
10
V\
11
R\
12
-\
13
N\
14
E\
15
T\
16
-\
17
I\
18
O\
19
\"\
20
 <"__SMTP_MAIL_FROM__">\r\nTo:<"__SMTP_MAIL_TO__">\r\nSubject: \
21
Test_Email!\r\n\r\nHallo\r\nNa wie gehts? Mir gehts prima.";
#2807403
Lesenswert?

Kennst du diese Taste rechts neben den Buchstaben? Die mit dem Pfeil, 
der zuerst nach unten und dann nach links geht?
Damit kann man neue Zeilen machen und dem Compiler ist egal, über 
wieviele Zeilen du deinen Code verteilst.

Genauso geht es auch andersrum und und du kannst mehrere Befehle mit ; 
getrennt in eine Zeile schreiben.
Gast #2807413
Lesenswert?

Lucas K. schrieb:
> Kennst du diese Taste rechts neben den Buchstaben? Die mit dem Pfeil,
> der zuerst nach unten und dann nach links geht?
> Damit kann man neue Zeilen machen und dem Compiler ist egal, über
> wieviele Zeilen du deinen Code verteilst.

schön geschrieben aber inhaltlich falsch.
#2807423
Lesenswert?

@Peter:
Ich hab mich vielleicht ein bisschen zu kurz gefasst:
Man kann mit einem Return natürlich nicht innerhalb eines Strings ohne 
neue Anführungszeichen Trennen, wie du es gezeigt hast. Aber man könnte 
damit die Variablen in eine neue Zeile verschieben. Und auch mit 
Tabs/Leerzeichen ordnen.
#2807436
Lesenswert?

ich würd's so machen:
1
PROGMEM char SMTP_TEXT[] = 
2
    "From: \"AVR-NET-IO\" <"__SMTP_MAIL_FROM__">\r\n"
3
    "To:<"__SMTP_MAIL_TO__">\r\n"
4
    "Subject: Test_Email!\r\n"
5
    "\r\n"
6
    "Hallo\r\n"
7
    "Na wie gehts? Mir gehts prima.";
Dann kann man sich auch vorstellen, wie's in etwa aussieht.
#2807520
Lesenswert?

jack schrieb:
> und das wichtigste, den '\' vergessen...
>
> Bevor du hier klugscheissen kannst brauchts nochn paar strenge winter...

Und du ein gutes C Buch.

Man kann einen String IMMER in mehrere Teile unterteilen. Der Compiler 
muss mehrere Stringliterale, die hintereinander kommen, zu einem 
einzigen zusammenfassen.

Und genau deswegen funktioniert die Lösung von Josef D. perfekt.
Persönliche Seite #2807656
Lesenswert?

Es geht auch ohne \ und man kann schöne einrücken.

Übrigens fehlt bei PROGMEM ein "const":
1
#ifdef WINDOS
2
#define NL "\r\n"
3
#else
4
#define NL "\n"
5
#endif
6

7
const char SMTP_TEXT[] PROGMEM =
8
    "From: \"AVR-NET-IO\" <" __SMTP_MAIL_FROM__ ">" NL
9
    "To:<" __SMTP_MAIL_TO__ ">" NL
10
    "Subject: Test_Email!" NL
11
    NL
12
    "Hallo" NL
13
    "Na wie gehts? Mir gehts prima.";

Ah, steht ja schon oben bei Josef :-)

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