Von den folgenden, welche ist die bevorzugte Art, Dinge zu tun, und warum? Gibt es bestimmte Situationen, in denen es einen Unterschied macht, unter der Annahme, dass die Funktionsleiste() zu keinem Zeitpunkt den Wert Null annimmt?Was ist der geeignetste Weg, um eine Variable in einer if-Anweisung zuzuweisen und zu testen?
Fall 1: Testen Sie den Wahrheitswert beider
Bedingungenif ((foo = bar()) && foo < 0)
error();
Fall 2: Test nur die Variablen zugewiesen
if ((foo = bar()) < 0)
error();
Für diejenigen, die dies finden und Perl verwenden, ist das Idiom 'foo = bar() oder error();'. Dies kann auch in C gemacht werden, aber es ist nicht üblich und kann verwirren: '(foo = bar()) || error(); '- Perls Zuweisung hat eine höhere Priorität als' || ', aber in C ist es umgekehrt. –
@PhilH Es wird allgemein als schlechter Stil angesehen, bedingte Nebenwirkungen als rechten Operanden einer booleschen Operation einzuschließen (MISRA-C 12.4). Und Ihr Code funktioniert nur, wenn error() etwas zurückgibt. Also versuchen Sie das nicht in C. – Lundin
Guter Punkt auf der Rückkehranforderung; Ich nehme an, in Perl gibt es keine solche Überprüfung und Fehler() wird immer ausgeführt. –