恐ろしいコードで作業しています。コード実装の比較、GCC、if/else-> continue
私はそれがこのwhile (x)
{
if (!check1)
{
error1();
continue;
}
if (!check2)
{
error2();
continue;
}
if (!check3)
{
error3();
continue;
}
function();
}
しかし...これは多くの製品..... である「タイムテストコード」です...と恐ろしいように見えるしたいと思います
while (x)
{
if (check1)
{
if (check2)
{
if (check3)
{
function();
}
else
{
error3();
}
}
else
{
error2();
}
}
else
{
error1();
}
}
今後のエラーを助長します。
コードを実装に変更すると、結果のコードは同等であることを証明する方法が必要です。
現在、私は2つのバージョンのコードをコンパイルすると、異なるバイナリファイルを取得します。
質問:
彼らは同じだということ、私が経営を表示できるように、両方の実装のために同じ出力を得るために、コンパイラを奨励するための方法はありますか?
実装が同等であることを示す別の方法はありますか?
あなたはose continueステートメント: 'if(!check1)error1(); else if(!check2)error2(); else if(!check3)error3(); else function(); 'はより簡潔かつ明確に機能します。 –
"プログラミングスタイルの要素"のKernighan&Plaugerは、 "条件をテストした後、何かをする"( "別の条件をテストしない"という意味)の行に沿って何かを言います。 –
私はそれが 'continue'なしでもっと明らかだと反対です。その明示的に、whileループの先頭に戻るのではなく、底に向かってスクロールして、elseの外側に何かがないことを確認することを言っています。 「continue」は多くの人が恐れる有用なツールです。 申し訳ありませんが、私のサンプルコードは短いです、実際のコードは10回以上カスケードし、ループの一番下を1つの画面で見ることはできません。だからこそ、私は「continue」を使う傾向があるのです –