Почему «;» не используется для i ++ в языке Си. Разве все не должно быть в конечном итоге «;»?
Нет, "все" не заканчивается точкой с запятой. Большинство операторов и все объявлений заканчиваются точкой с запятой, но i++
является выражением . То есть он выражает операцию, которая производит значение. То, что оно также имеет побочный эффект, не имеет отношения к этому анализу. Другие выражения включают i + 1
, i > 0
, i
в одиночку и даже i = 42
, среди множества других. Ни один из них не требует конечной точки с запятой в общем случае, и все они могут использоваться как подвыражения более сложных выражений.
C действительно имеет понятие «выражение оператора», где выражение может использоваться как оператор (для его побочных эффектов). В этом случае оператор завершается точкой с запятой, как и многие другие типы операторов. На самом деле они очень распространены в коде C, потому что присваивания и вызовы функций являются выражениями, а операторы выражений, сделанные из выражений этих типов, составляют основную часть большинства кодов C. Но утверждения не должны быть истолкованы как «все».
Почему бы не использовать ;
после i++
в цикле for?
Проще говоря, это потому, что язык требует, чтобы вы этого не делали. Что касается моих предыдущих комментариев, то это потому, что третье предложение управляющего блока оператора for
требует выражения, а не оператора.