Boost :: asio Was ist das für ein merkwürdiger Code-Stil?

8

Ich bin dabei, etwas in meiner Boost-Asio-Socket-Kommunikation zu debuggen. Und fand dieses Stück Code in der Asio-Bibliothek (zu finden in boost / asio / impl / write.hpp Zeile 169 (Boost 1.47)):

%Vor%

Ich habe schon viele Jahre C / C ++ Entwicklungserfahrung, aber nie in meinem Leben habe ich solch eine seltsame Implementierung gesehen. Schauen Sie dort, das Standard-Label der switch-Anweisung ist innerhalb der for-Schleife.

Wenn ich das richtig verstehe, dann wird die switch-Anweisung "missbraucht" anstatt eines goto, rechts (für die Fälle, wo start! = 1, goto default :)? Ist es tatsächlich ein gültiges C / C ++ in Bezug auf den Standard? Was passiert, wenn ich zum Beispiel

setze %Vor%

anstelle der for-Schleife im ursprünglichen Code. Wird "i" undefiniert sein, wenn der Sprung zur Standardeinstellung ausgeführt wird: label? Sicher, ich könnte hier einen Debugger verwenden, aber das scheint mir so verdächtig, dass ich denke, dass dies ein anderes Verhalten für verschiedene Compiler erzeugen könnte.

    
cgart 09.11.2011, 11:03
quelle

2 Antworten

8

Dies ist ein gut definierter, gültiger Code. A switch ist wirklich eine verherrlichte goto . Schauen Sie sich das Duff-Gerät an, um etwas clever mit diesem Konstrukt zu arbeiten.

Was Ihr for betrifft, wäre das nicht legal. Ein Sprung zu einer Groß- / Kleinschreibung kann eine Initialisierung nicht überschreiten.

    
David Schwartz 09.11.2011, 11:07
quelle
2

Es scheint eine Version von Duffs Gerät zu sein.

    
Some programmer dude 09.11.2011 11:09
quelle

Tags und Links