Когда вы пишете цикл, иногда желательно использовать первую форму, как в этом известном примере из K & R:
int c;
while ((c = getchar()) != EOF) {
/* stuff */
}
Не существует элегантного способа написания второй формы без повторения:
int c = getchar();
while (c != EOF) {
/* stuff */
c = getchar();
}
Или:
int c;
for (c = getchar(); c != EOF; c = getchar()) {
/* stuff */
}
Теперь, когда присваивание c
повторено, код более подвержен ошибкам, потому что нужно синхронизировать оба оператора.
Таким образом, нужно уметь легко читать и писать первую форму. И, учитывая это, кажется логичным использовать ту же форму и в if
условиях.
Я склонен использовать первую форму в основном потому, что мне легко читать & mdash; как кто-то сказал, она гораздо ближе связывает вызов функции и проверку возвращаемого значения.