Warum scheinbar bedeutungslos do-while-und if-else-Anweisungen in Makros?

In vielen C/C++ - Makros sehe ich den code des Makros, eingehüllt in das, was scheint wie eine sinnlose do while Schleife. Hier sind Beispiele.

#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else

Ich kann nicht sehen, was die do while tut. Warum nicht einfach schreiben das ohne es?

#define FOO(X) f(X); g(X)
Für das Beispiel mit der anderen, ich möchte hinzufügen, ein Ausdruck der void Typ am Ende... wie ((void)0).
Erinnerung daran, dass die do while Konstrukt nicht kompatibel mit return-Anweisungen, so dass die if (1) { ... } else ((void)0) Konstrukt hat mehr kompatible Nutzungen in Standard-C. Und in GNU-C, Sie bevorzugen das Konstrukt beschrieben in meiner Antwort.

InformationsquelleAutor jfm3 | 2008-09-30

Schreibe einen Kommentar