Это просто более короткий способ написать то же самое, и это сбивает с толку тех, кто не понимает C (a) . Тот же аргумент может быть приведен для замены:
for (i = 0; i < 10; i++)
printf ("%d\n", i);
с:
i = 0;
while (i < 10) {
printf ("%d\n", i);
i = i + 1;
}
, поскольку любое for
также можно сделать с помощью while
или:
i = 0;
loop: if (i < 10) {
printf ("%d\n", i);
i = i + 1;
goto loop;
}
, так как любая конструкция цикла может быть построена из условий и goto
. Но (я надеюсь) ты бы этого не сделал, не так ли?
(a) Иногда мне нравится объяснять это моим студентам в виде простых утверждений и побочных эффектов, что позволяет коду C быть более лаконичным, обычно с минимальной потерей читаемости или минимальными потерями.
Для утверждения:
y = x++;
оператор присваивает x
y
с побочным эффектом, который впоследствии увеличивает x
. ++x
то же самое, просто побочный эффект происходит заранее.
Точно так же побочным эффектом присвоения является то, что оно оценивается как присвоенное значение, что означает, что вы можете делать такие вещи как:
while ((c = getchar()) != -1) count++;
и что делает такие вещи как:
42;
совершенно правильные, но бесполезные операторы Си.