Ist es richtig, mehrere Anweisungen in einem Makro zu schreiben?Mehrere Anweisungen in einem Makro
#define AB() do { printf("hi"); } while(0)
Ist es richtig, mehrere Anweisungen in einem Makro zu schreiben?Mehrere Anweisungen in einem Makro
#define AB() do { printf("hi"); } while(0)
Ja, das ist der richtige Weg.
Im Idealfall möchten Sie ein Makro in eine einzelne Aussage zu erweitern, nicht eine Verbindung Aussage. Dein befriedigt das.
Sie können dieses Makro sicher in einem if
, else
Block verwenden.
Ja.
Obwohl der richtige Weg meistens ist, überhaupt kein funktionsähnliches Makro zu haben.
Bitte beachten Sie, dass das do-while (0) Trick in Codebasen mit schlampig Klammer Stil nur relevant ist, wie
if(x)
AB();
else
Das do-while (0) Trick wird verursacht durch die Compiler-Fehler verhindern streak Semikolon, wenn es eine else
Anweisung folgt. Wenn das Makro nur geschweifte Klammern verwendet, erhalten Sie if(){}; else
, was ein Syntaxfehler ist.
Beachten Sie, dass der oben genannte Klammerstil einen der teuersten Softwarefehler in der Geschichte verursacht hat, bekannt als Apple "goto-fail" Bug. Es gibt also sehr gute Gründe, es nie zu benutzen. Wenn Sie nach jeder Anweisung immer {}
verwenden, wird der do-while (0) Trick ebenfalls irrelevant.
Ein Makro ist nur Textersatz. Ich denke nicht, dass die Frage einen Sinn ergibt. Sie haben im Allgemeinen nichts * in * einem Makro, weil ein Makro keine syntaktische Einheit ist. –
Nun, das hängt davon ab, wie Sie das Makro verwenden möchten –
Das betreffende Makro hat den Vorteil, dass die Verwendung als Funktionsaufruf geschrieben werden kann, d. H. 'AB();' –