Ich bin auf dieses Stück Code für einen LPCxxxx-Mikrocontroller in der Reset-Routine gestoßen.
do {
const uint32_t topOfStack = (uint32_t) &_vStackTop;
__set_PSP(topOfStack);
__set_MSP(topOfStack);
} while(0);
Ich habe mich gefragt, warum sich dies in einer Do-while-Schleife befindet (die nur einmal ausgeführt wird), anstatt diese Anweisungen direkt zu schreiben (womit ich außerhalb der Schleife meine).
In diesem speziellen Fall, der nicht in den Stackoverflow-Antworten behandelt wird, haben Sie die Möglichkeit, eine lokale Variable zu deklarieren, die von den drei Anweisungen gemeinsam genutzt und nirgendwo anders verwendet wird.
Diese Art der expliziten Speicheroptimierung kann auf kleinen Mikrocontrollern wichtig sein.
do
und die while(0);
.uint32_t
. Ich bin mir ziemlich sicher, dass das do-while(0) überflüssig und {}
ausreichend ist, auf jedem bekannten Compiler der Welt. Wenn Ihr Compiler kein alter Schrott ist, brauchen Sie die geschweiften Klammern natürlich überhaupt nicht. Überspringe sie und ermutige/erzwinge dadurch Leute, Compiler zu verwenden, die nicht älter als 17 Jahre sind (nach dem Jahr 1999).
Nils Pipenbrink