Haftungsausschluss: Ich weiß, dass es obskur ist, und ich würde nicht so programmieren. Ich bin mir der bevorzugten do-while
Aussage bewusst, eher als die, die Frage ist mehr über die Gültigkeit eines spezifischen Sprachkonstrukts.Gültigkeit der Erzwingung mindestens einer Iteration der for-Schleife mit goto-Anweisung
Ist goto
immer bedingter Ausdruck der for
Schleife verzichten soll? Von dem, was ich beobachtete, überspringt es sowohl den ersten (d. H. Den Initialisierungs-) als auch den zweiten Ausdruck. Wird dies immer so geschehen oder ist dieses Verhalten rein kompilerabhängig?
#include <stdio.h>
int main(void)
{
int m = 5;
goto BODY;
for (m = 0; m < 5; m++)
BODY: puts("Message"); // prints "Message" once
printf("m = %d\n", m); // prints m = 6
return 0;
}
* "es überspringt beide zuerst (d. H. Initialisierung) und zweiten Ausdruck" *. Jep. * "Die Frage ist mehr über die Validität eines Sprachkonstrukts" * Das Sprachkonstrukt ist für alle vernünftigen Programmierer ungültig, weil es viel bessere Möglichkeiten gibt, dasselbe zu tun (und keine Genehmigung durch Sprachanwälte benötigen). – user3386109
@ user3386109: Sensible oder nicht, es gibt auch Leute, die C/C++ - Compiler schreiben und egal wie es aussieht, das 'Goto' ist immer noch Teil der Sprache. –
Ich weiß es nicht genau, aber ich vermute, dass "goto" in den Körper einer Schleife (wenn der Compiler es überhaupt erlaubt) zu "undefined Verhalten" führt. –