Как указано в вопросе, оба цикла эквивалентны. Однако в реальном коде типично, что все немного сложнее, и в этом случае условие «i
Это случай защитного программирования. Это не является общепринятым: некоторые люди предпочитают следить за тем, чтобы что-то происходило как можно эффектнее, чтобы ошибки были обнаружены на ранней стадии. Оборонительный стиль может скрывать такие небольшие проблемы. Однако, если вы хотите поймать все ошибки, вы можете пройти весь путь:
int n = 5;
int i = 0;
while (i != n) {
int old_i = i;
// the real stuff of the loop here
++i;
assert(i == old_i + 1);
}
(Или, что еще лучше, используйте язык, который поддерживает синтаксис, для указания предварительных и постусловий и циклических инвариантов.)
Книга Эндрю Кенига "Ловушки и ловушки" (см. http://en.wikipedia.org/wiki/C_Traps_and_Pitfalls
для начала) вам, вероятно, интересно, если вы хотите поразмышлять над этим вопросом.