Ich finde es sehr nützlich in Ketten von Handlungen, die oft Fehlererkennung beinhaltet, usw.
if ((rc = first_check(arg1, arg2)) != 0)
{
report error based on rc
}
else if ((rc = second_check(arg2, arg3)) != 0)
{
report error based on new rc
}
else if ((rc = third_check(arg3, arg4)) != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
Die Alternative (nicht die Zuordnung in der Bedingung verwendet wird) ist:
rc = first_check(arg1, arg2);
if (rc != 0)
{
report error based on rc
}
else
{
rc = second_check(arg2, arg3);
if (rc != 0)
{
report error based on new rc
}
else
{
rc = third_check(arg3, arg4);
if (rc != 0)
{
report error based on new rc
}
else
{
do what you really wanted to do
}
}
}
Mit langwieriger Fehlerüberprüfung kann die Alternative, um die rechte Seite von der Seite, während der Zuweisung-in-bedingte Version ablaufen macht das nicht.
Ich stimme zu - aber würde schreiben: while ((var = GetNext())! = 0) {...}, ohne zweimal darüber nachzudenken, zum Teil weil GCC sich beschwert, wenn ich nicht mit meinen Standard-Kompilierungsoptionen arbeite . –
Wahr. Angenommen, Sie verwenden eine Sprache, die For-Loop-Deklarationen unterstützt, und Sie verwenden var nicht außerhalb der Schleife. – Gerald
in einigen Sprachen, wie ANSI C, erlauben Scoping-Regeln diesen Ansatz nicht, @KerrekSB – wirrbel