Ich arbeite an schrecklichen Code.Vergleichen von Code-Implementierungen, GCC, wenn/else-> weiter
while (x)
{
if (check1)
{
if (check2)
{
if (check3)
{
function();
}
else
{
error3();
}
}
else
{
error2();
}
}
else
{
error1();
}
}
Ich würde es gerne mögen dieses
while (x)
{
if (!check1)
{
error1();
continue;
}
if (!check2)
{
error2();
continue;
}
if (!check3)
{
error3();
continue;
}
function();
}
aussehen, aber ... Das ist 'Zeit getestet Code', die in vielen Produkten ist ..... ... und schrecklich mit zu arbeiten und wird Fehler in der Zukunft fördern.
Ich brauche einen Weg zu beweisen, dass, wenn ich den Code zu meiner Implementierung ändern, der resultierende Code gleichwertig ist.
Gerade jetzt, wenn ich die beiden Versionen von Code kompiliere, bekomme ich verschiedene Binärdateien.
Fragen:
Gibt es eine Möglichkeit, den Compiler zu ermutigen, die gleiche Leistung für beide Implementierungen zu bekommen, so dass ich Management nachweisen können, dass sie das gleiche sind?
Gibt es eine andere Möglichkeit zu demonstrieren, dass die Implementierungen äquivalent sind?
Sie brauchen nicht von th Ose Continue-Anweisungen: 'if (! check1) error1(); sonst if (! check2) error2(); sonst falls (! check3) error3(); else function(); 'arbeitet prägnanter und klarer. –
Kernighan & Plauger in "Die Elemente des Programmierstils" sagen etwas in der Art von "Nachdem Sie eine Bedingung getestet haben, tun Sie etwas" (was bedeutet "teste nicht eine andere Bedingung"). –
Ich stimme nicht zu, dass es klarer ist, ohne 'continue's. Es sagt explizit, dass ich zurück zum Anfang der "while" -Schleife gehe, anstatt nach unten zu scrollen, um zu überprüfen, ob es etwas außerhalb des else gibt, wenn ... Ich denke, dass "continue" ein ist nützliches Werkzeug, vor dem viele Angst haben. Entschuldigung, mein Beispielcode ist kurz, der eigentliche Code kaskadiert über 10 Mal und Sie können den unteren Teil der Schleife nicht auf einem einzigen Bildschirm sehen. Deshalb bin ich eher geneigt, das 'continue' –