Forum: Mikrocontroller und Digitale Elektronik Define für Portpins schalten


von Define (Gast)


Lesenswert?

hi,

Eine Frage zu unten angegebenem Define:

#define MAKRO_1   P3DIR |= BIT4; P3OUT |= BIT4;

werden beide Befehle ausgeführt, oder endet das Define nach dem ersten 
Semikolon?

mfg

von Sven P. (Gast)


Lesenswert?

'Das #define' interessiet sich nicht für Semikolons. Die werden schlicht 
mitkopiert.

von kommt drauf an (Gast)


Lesenswert?

...kommt drauf an, wie du das Makro einsetzt:
1
while (irgendetwas) MAKRO_1;

dann nur bis zum 1. Semikolon.
1
while (irgendetwas) {MAKRO_1}

dann bis zu 2. Semikolon.

von Rolf Magnus (Gast)


Lesenswert?

Man beachte allerdings, daß nicht unbedingt das passiert, was man 
erwartet, wenn man z.B. schreibt:
1
if (irgendwas)
2
    MAKRO1;

von Sven P. (Gast)


Lesenswert?

kommt drauf an schrieb:
> ...kommt drauf an, wie du das Makro einsetzt:
>
>
1
> while (irgendetwas) MAKRO_1;
2
>
>
> dann nur bis zum 1. Semikolon.
>
>
1
> while (irgendetwas) {MAKRO_1}
2
>
>
> dann bis zu 2. Semikolon.

Es empfiehlt sich in solchen Fällen, im Makro eine Konstruktion wie 
diese zu benutzen:
1
#define GAGA  do { a(); b(); c(); } while(0)

Man beachte do/while. Geschweifte Klammern alleine können in die Hose 
gehen.

von kommt drauf an (Gast)


Lesenswert?

Sven P. schrieb:
> Es empfiehlt sich in solchen Fällen, im Makro eine Konstruktion wie
> diese zu benutzen:

die Frage war eine andere und das mit dem while nur ein Beispiel..., man 
hätte es auch mit einem if oder ählichem das Problem verdeutlichen 
können!

von Kein Name (Gast)


Lesenswert?

Also Leute...
solche Tricks brauchten unsere Vorfahren. Als man noch mit Fernschreiber 
und ed programmierte.
Gibt es noch C-Compiler ohne Inline Funktionen?

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
Noch kein Account? Hier anmelden.