Подтвердить что ты не робот

Две точки с запятой внутри круглых скобок

Я настраиваю код, который нашел в интернете (это чек Adafruit Tweet). Я не могу понять многие части кода, но меня больше всего озадачивает цикл for с двумя точками с запятой в скобках

boolean jsonParse(int depth, byte endChar) {
  int c, i;
  boolean readName = true;

  for(;;) {  //<---------
    while(isspace(c = timedRead())); // Scan past whitespace
    if(c < 0) return false; // Timeout
    if(c == endChar) return true; // EOD

    if(c == '{') { // Object follows
      if(!jsonParse(depth + 1, '}')) return false;
      if(!depth) return true; // End of file
      if(depth == resultsDepth) { // End of object in results list

Что значит для (;;)? (Это программа Arduino, так что я думаю, это на C).

4b9b3361

Ответ 1

for(;;) {
}

функционально означает

 while (true) {
 }

Вероятно, он сломает цикл/возврат из цикла на основе некоторого условия внутри тела цикла.

Причина, по которой for(;;) петли навсегда, состоит в том, что for состоит из трех частей, каждая из которых является необязательной. Первая часть инициализирует цикл; второй решает, продолжать или нет цикл, а третий делает что-то в конце каждой итерации. Это полная форма, вы обычно видите что-то вроде этого:

for(i = 0; i < 10; i++)

Если первая часть (инициализация) или последняя (конец-итерация) отсутствуют, на их месте ничего не делается. Если средняя (тестовая) часть отсутствует, то она действует так, как если бы на ней было true. Итак, for(;;) совпадает с for(;true;) ', который (как показано выше) совпадает с while (true).

Ответ 2

Цикл for имеет 3 компонента, разделенных полуколониями. Первый компонент запускается до начала цикла и обычно используется для инициализации переменной. Второе условие. Условие проверяется в начале каждой итерации, и если оно оценивается как true, тогда выполняется код в цикле. Третьи компоненты выполняются в конце цикла, прежде чем начинается другая итерация (начиная с проверки состояния) и часто используется для увеличения переменной.

В вашем случае for(;;) означает, что он будет циклически навечно, так как условие не существует. Цикл заканчивается, когда код return или break s.

Ответ 3

Каждое предложение цикла for является необязательным. Поэтому, когда они исключены, они все еще повторяются. Циклы for объединяются в циклы while.

Конечный результат становится проверкой для инициализации любых переменных, которая завершается после того, как ничего не происходит, поскольку она пуста, проверка на логическое условие во втором предложении, которого нет, поэтому цикл начинается, и как только цикл попадает в end check, проверьте, есть ли какой-либо код для запуска, прежде чем снова проверить логическое состояние.

В коде это выглядит так:

while(true){

}

Ответ 4

Здесь Что Wikipedia Говорит Об этом

Использовать как бесконечные циклы
Этот C-стиль for-loop обычно является источником бесконечного цикла, поскольку основные этапы итерации полностью контролируются программистом. Фактически, когда предназначены бесконечные петли, этот тип цикла for может использоваться (с пустыми выражениями), например:

for (;;)
   //loop body

Этот стиль используется вместо бесконечных циклов while(1), чтобы избежать предупреждения о преобразовании типов в некоторых компиляторах C/С++. Некоторые программисты предпочитают более сжатую форму for(;;) над семантически эквивалентной, но более подробной формой while (true).