Вполне допустимо, чтобы оператор в C был просто значением, которое отбрасывается.Большинство людей не понимают, что это именно то, что происходит, когда они кодируют такие вещи, как:
x++;
printf ("Hello, world\n");
Первое - это на самом деле выражение, которое, как оказалось, имеет побочный эффект увеличения переменной после «возврата»it.
Последний вызов функции фактически возвращает значение (количество напечатанных символов), которое также отбрасывается.
С определенной точки зрения это ничем не отличается от операторов:
42;
3 * 12;
кроме того факта, что они не имеют побочных эффектов, которые делают их полезными.
На самом деле, даже x = 1
- это выражение, в котором результат отбрасывается.Именно это делает возможным x = y = z = 0
, поскольку это эффективно:
(x = (y = (z = 1)));
Все это подробно описано в разделе C99, раздел 6.8.3 Expression and null statements
, в котором частично говорится:
Выражение в выражении выражения оценивается как пустое выражение для его побочных эффектов, таких как присваивания и вызовы функций, которые имеют побочные эффекты.