Я не знаю, следует ли рассматривать ваш вопрос как дубликат, но, возможно, это ответ:
По-разному ли обрабатываются циклы с круглой скобкой и без нее в C?
Отладчик выполняет один оператор за раз.
Я немного ошибся в своем предыдущем ответе. Конечно, отладчик также выполняет цикл 4 раза. Разница в том, что он выглядит как будто он выходит после одной итерации. Когда я отлаживаю следующий код:
#include <stdio.h>
int main (int argc, const char * argv[]) {
int r;
for (r = 0;;r++)
if (r == 4)
break;
printf("%i",r);
return 0;
}
отладчик обрабатывает строку for
, затем строку if
, строку for
и затем выделяет строку printf
. Таким образом, похоже, что printf
будет выполнено, но на следующем шаге отладчик снова выделит строку if
, затем перейдет к for
, увеличив, таким образом, r
, а затем снова выделив printf
.
Это код, который я пробовал в XCode, и он в основном такой же, как описано выше (я только что добавил несколько строк кода в main.m
в новом проекте приложения Cocoa):
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
int r;
for (r = 0;;r++)
if (r == 4)
break;
return NSApplicationMain(argc, (const char **) argv);
}
Изображение с применением какао:
Отладчик http://img691.imageshack.us/img691/3844/1002060002.png
Итак, вопрос в том, действительно ли вы щелкали по циклу шаг за шагом и действительно ли цикл завершается после одной итерации, или вы просто остановились после одной итерации?