Скомпилируем следующий код и посмотрим на сборку:
#include <stdio.h>
int loop_with_break() {
for (int i = 0; i < 10; i ++) {
puts("Hello, world!");
if (i == 3) {
break;
}
}
}
int loop_with_assignment() {
for (int i = 0; i < 10; i ++) {
puts("Hello, world!");
if (i == 3) {
i = 10;
}
}
}
int main() {
loop_with_break();
loop_with_assignment();
}
сборка л oop с назначением Как видите, когда вы используете break
, если i == 3
, он выскакивает прямо из l oop в конец функции, тогда как если вы используете i = 10
, он установите i
на 10, увеличьте его на 1, затем выполните сравнение, которое будет медленнее. Однако это было скомпилировано без оптимизации. Если вы используете оптимизацию, они оба становятся одним и тем же. Однако, поскольку break
более читабелен и такая оптимизация не гарантируется, вы должны использовать его для выхода из циклов.