C: tue {...} while (0)? [Duplikat]

9
  

Mögliche Duplikate:
Warum gibt es in C / C ++ - Makros manchmal sinnlose Anweisungen in / while und if / else?
tue {...} while (0) what ist es gut für?

Ich arbeite an einem C-Code, gefüllt mit Makros wie folgt:

%Vor%

Kann jemand erklären, was dieses Makro macht und warum do {} while(0) benötigt wird? Würde das nicht einfach einmal ausgeführt?

    
igul222 22.04.2010, 00:58
quelle

4 Antworten

19
%Vor%

macht genau dasselbe wie stuff (). Also, was ist dann die große Sache? Das Problem besteht in der Syntax von Makros. Angenommen, wir haben das Makro wie folgt definiert:

%Vor%

Dann gibt es zwei Probleme. Die erste ist relativ unbedeutend: Für die Verwendung von SAFE_FREE ist kein abschließendes Semikolon mehr erforderlich. Wichtiger jedoch, Code wie:

%Vor%

Wird erweitert zu:

%Vor%

Das Definieren des Makros wie oben verhindert seltsames Verhalten wie oben, da do { ... } while(0) genau wie eine Anweisung ohne Semikolon funktioniert.

    
jon 22.04.2010, 01:04
quelle
14

Die do while-Methode ist eine gängige Konvention, bei der das Makro einen abschließenden Semikolon wie eine Standard-c-Funktion erfordert. Abgesehen davon stellt es nur sicher, dass die Variable, die freigegeben wurde, auf NULL gesetzt ist, so dass zukünftige Aufrufe zum Freigeben keine Fehler verursachen.

    
Nick Van Brunt 22.04.2010 00:59
quelle
1

BTW Häufig gestellte Fragen zu C ++ - Stil und -Technik Bjarne Stroustrup schlägt vor, einen Inline-Code zu verwenden (Vorlage) Funktion, um eine "löschen und null"

zu tun %Vor%     
hamishmcn 22.04.2010 01:22
quelle
0

Die Idee hinter do / while (0) ist, dass Sie das Makro verwenden können, in dem Sie einen Funktionsaufruf ohne unerwartete Fehler verwenden würden.

Wenn Sie beispielsweise folgenden Code hatten:

%Vor%

und das Makro war nur:

%Vor%

Sie würden ein ganz anderes Ergebnis erhalten. Die Do / Why-Konvention vermeidet diese Fehler, indem sie sich konsistent verhält.

    
janm 22.04.2010 01:05
quelle

Tags und Links