Ich habe bemerkt, dass C-Makros manchmal so geschrieben sind:
%Vor%Nach einigen Experimenten habe ich folgendes gefunden:
({});
wird kompiliert, tut aber nichts. (Wie erwartet.) ;
deaktiviert ist, wird ein Syntaxfehler verursacht. Ein Nebeneffekt davon ist sicherzustellen, dass foo () wie eine Funktion in Ihrem Code aussieht. (Wenn Sie das Semikolon jedoch nicht verwenden, ist der Fehler für die Diagnose des Problems nicht sehr hilfreich!) return ({});
beschwert sich darüber, dass ein ungültiger Wert nicht ignoriert wird, genauso wie wenn ich versucht hätte, eine void-Funktion zu verwenden. Müssen Entwickler nur ein Semikolon zu ihren Makros hinzufügen oder haben sie einen anderen Zweck? Ich habe Google ausprobiert, aber es schlägt kläglich mit Interpunktion fehl. Gibt es einen Namen dafür?
Dies ist eine GNU-Erweiterung namens Anweisungsausdrücke .
Wenn Sie Makros in Standard-C deklarieren, sehen Sie oft do...while(0)
-Schleifen, die für ähnliche Zwecke verwendet werden (dh einen Blockbereich erstellen). Ein Anweisungsausdruck ist dem Schleifen-Hack überlegen, da er einen Wert zurückgeben kann. Wenn Sie in Standard-C etwas Ähnliches tun möchten, müssen Sie eine zusätzliche Funktion definieren und den Vorteil der lexikalischen Festlegung verlieren.
Das Coole an Aussageausdrücken (wenn es eine coole Sache gibt) ist, dass die letzte Aussage das Ergebnis des Ausdrucks ist.
%Vor%