Weitere Informationen zu '({});' in C?

8

Ich habe bemerkt, dass C-Makros manchmal so geschrieben sind:

%Vor%

Nach einigen Experimenten habe ich folgendes gefunden:

  1. ({}); wird kompiliert, tut aber nichts. (Wie erwartet.)
  2. Wenn ; 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!)
  3. 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?

    
Ryan Fox 16.01.2010, 02:03
quelle

3 Antworten

8

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.

    
Christoph 16.01.2010, 02:05
quelle
3

Das Coole an Aussageausdrücken (wenn es eine coole Sache gibt) ist, dass die letzte Aussage das Ergebnis des Ausdrucks ist.

%Vor%     
Richard Pennington 16.01.2010 02:12
quelle
2

() ist ein Ausdruck. ({code; code;}) ist eine zusammengesetzte Anweisung in einem Ausdruck. Das ist eine GNU C Erweiterung.

Ссылка

EDIT: wow, ich habe diesen Link von Google bekommen und habe nicht bemerkt, dass es zuerst für gcc 2.95 war. Uralt!

    
Nicolás 16.01.2010 02:06
quelle

Tags und Links