#define anweisungen, "\" unbekannter operator

Gast #401472
Lesenswert?

hi,

beim nachfolgendem makrodefine bin ich verunsichert:

#define makro() \
IEN=0;

das IEN=0 gehört scheinbar zum makro

auch wird "\" scheinbar als trennungszeichen für auszählungen
genutzt.

#define DEFINITION {            \,
                      {definition1}\,
                      {definition2}\,
                      {definition3}\,
                    }

kann mir da jemand auf die sprünge helfen?
ich habe sowas in C noch nie gesehen. Kann auch nirgends im Netz
finden.

Vielen Dank
Gast #401473
Lesenswert?

das \ lässt den nachsten zeilenvorschub (also CR/LF) ignorieren, so
wird

hallo \
test \
welt

zu hallo test welt.

das gilt nicht nur für präprozessoranweisungen. das klappt auch bei
strings

"langer text" \
"über zwei"\
"zeilen"

bei den defines macht das besonders dann sinn, wenn der text der hinter
diesen defines steckt besonders lang ist, und man nicht immmer wie wild
von links nach rechts scrollen muß

gruß
rene
Gast #401477
Lesenswert?

@oldbug

stimmt. ist mir gerade erst aufgefallen das hinter dem \ noch ein ,
ist.. von daher kann es dann nicht klappen (bzw. der compiler müsste
meckern).
allerdings bin ich mir nicht sicher ob es nicht doch möglich ist hinter
dem \ noch spaces zu haben.
aber ich denke das hängt vom compiler ab (z.b. meckert der IAR wenn in
der letzten zeile zeichen (spaces) außer cr/lf stehen).

gruß
rene
Gast #401478
Lesenswert?

Richtig, das "," ist wohl das Problem. Leerzeichen sollten eigentlich
keine Probleme machen.

Um Mehrzeilige Makros ganz sicher zu machen sollte man folgende
Notation verwenden:

#define MAKRO do {
Gast #401479
Lesenswert?

Sorry, da fehlt noch was:

#define MAKRO() do {       \
                   Anweisung1();   \
                   Anweisung2();   \
                   Anweisung3();   \
                }while (0)

Dann hat man auch kein Problem bei z.B. folgender verwendung:

if (23 == abc)
   MAKRO();
else
   ...
Gast #401480
Lesenswert?

@christian

stümmt. so funktionierts ! :-)

nutze die präprozessor-makros ganz intensiv für meine software sachen.
damit kann man saumässig viel machen (nicht zuletzt kapuut-machen
:-)))
vor allem bei code-generierten tabellen (fett grinsend) kann man
super damit arbeiten.
ich wünschte mir jede programmiersprache hätte sowas (vor allem
assembler und delphi, da tut sowas derart not .....)

gruß
rene

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