Ниже приведен фрагмент стандарта C (раздел 6.8.5 из n1256 TC3 C99).Альтернативный синтаксис для петли
итерация-оператор:
в то время как(выражение)заявление
сделатьзаявлениев то время как(выражение);
для(выражение неавтоматического; выражения опта; выражения опта)заявления
для(декларациявыражение неавтоматического; выражение неавтоматического)заявление
Что задевает мой интерес это последнее утверждение: for (declaration expression ; expression) statement
. 6.8.5.1 объясняет цикл for
, но только упоминает синтаксис for (clause-1 ; expression-2 ; expression-3) statement
.
Я сделал несколько попыток написания кода в соответствии с этим синтаксисом, но все они дали мне синтаксические ошибки. Примеры:
for (int i = 0, i; i++) { /* ... */ }
for (int i = 0; !(i++)) { /* ... */ }
Какие все приводит к ошибкам, подобных error: expected ‘;’ before ‘)’ token
при компиляции с использованием GCC (v4.9.2).
Я не уверен, правильно ли я интерпретирую стандарт. Может ли этот синтаксис использоваться каким-то полезным способом или я что-то упустил?
Я действительно задавался вопросом, что такое выражение * декларации * wouldd быть, прежде чем читать ответы :-) – Bergi
это точно такой же вопрос, как: http://stackoverflow.com/questions/23168997/is-there-a-way-to-create-a-for-loop-with-only-two-expressions-in-c – Octopus