if(test-expr) then-statementelse else-statement//equal to t = test-statement if(!t) goto false; then-statement goto done;false: else-statementdone:
并不一定等价
v = test-statement ? then-expr : else-expr//equal tov = then-expr;ve = else-expr;t = test-expr;if(!t) v = ve;
do body-statement while (test-expr);//equal toloop: body-statement t = test-expr; if(t) goto loop;
while (test-expr) body-statement//ver 1 jump to middle goto test;loop: body-statementtest: t = test-expr; if (t) goto loop;//ver 2 guarded do t = test-expr; if(!t) goto done;loop://do-while body-statement t = test-expr; if (t) goto loop;done:
for (init-expr; test-expr; update-expr) body-statement//ver 1 init-expr; goto test;loop: body-statement update-expr;test: t = test-expr; if (t) goto loop;//ver 2 init-expr; t = test-expr; if(!t) goto done;loop://do-while body-statement update-expr; t = test-expr; if (t) goto loop;done: