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

Является ли код "while (condition)"; действительный и что это значит?

Можно ли положить точку с запятой как while(condition); в программировании на С? Если while(condition); действительно, что это значит?

4b9b3361

Ответ 1

while (condition);

совпадает с

while (condition) 
{
}

Он может использоваться для циклов ожидания, например:

while (!isLightGreen()); // waits until isLightGreen() returns true
go();

Ответ 2

Это означает, что тело цикла пусто. Обычно этот шаблон используется, когда само условие выполняет некоторую работу.

Например, этот цикл может копировать байты в условии:

while ( '\0' != (*pt++ = *ps++))
            ;

Если вы используете точку с запятой, рекомендуется разместить ее на отдельной строке, чтобы она выглядела не так, как ошибка. Я лично склонен использовать пустые фигурные скобки - {}, а иногда и комментарий, что пустой блок является преднамеренным.

Edit:

Во втором комментарии Том Андерсон отмечает улучшение по сравнению с одиночной точкой с запятой. Руководство по стилю Google С++ рекомендует либо это, либо {}.

while ( '\0' != (*pt++ = *ps++))
            continue;

Ответ 3

Поскольку условие может иметь побочные эффекты, такая конструкция разрешена. Рассмотрим следующее:

while (*p && *p++ != ' ');

Это приведет к указанию p на первый символ, который является пространством.

Вы даже можете использовать оператор запятой для выполнения обычных утверждений внутри условия:

while (do_something(), do_something_else(), i < n);

Поскольку утверждения, связанные с оператором запятой, вычисляются в самом крайнем утверждении, в этом случае i < n указанное выше идентично:

do {
  do_something();
  do_something_else();
} while (i < n);

Ответ 4

Да, вы можете. Это просто означает, что цикл while будет продолжать цикл до тех пор, пока condition не станет ложным. Например:

#include<stdio.h>

int x = 10;
int func()
{
  printf("%d\n", x);
  return --x;
}

int main()
{
  while(func());
  return 0;
}

Но, как правило, люди этого не делают, так как было бы разумнее поставить логику в тело цикла.

Edit:

Есть несколько примеров этого в использовании, например, копирование строки с нулевым завершением:

char dest[256];
char *src = "abcdefghijklmnopqrstuvwxyz";
while(*(dest++) = *(src++));

Ответ 5

Он будет продолжать оценивать условие до тех пор, пока оно не станет ложным. Это петля без тела.

Программисты часто добавляют пробел перед точкой с запятой, т.е.

while(condition) ;

или пустые фигурные скобки:

while(condition) {}

чтобы показать пустое тело, преднамеренное, а не только опечатка. Если вы читаете какой-то существующий исходный код и задаетесь вопросом, почему существует пустой цикл, вы должны прочитать следующие несколько строк, чтобы увидеть, действительно ли точка с запятой была там или нет (т.е. Следующие несколько строк выглядят как тело петля или нет?).

Ответ 6

Да, это правильно. Он будет зацикливать условие до тех пор, пока оно не станет ложным.

while ( condition() );

Ответ 7

while() - это цикл. Вероятно, вы хотите сделать цикл "do-while". Циклы do-while выполняются в этом формате:

do
{
    // Your process
    // When something goes wrong or you wish to terminate the loop, set condition to 0 or false
} while(condition);

Тем, что вы указали выше, является пустой петлей.

while() петли работают почти одинаково; просто нет части "do".

Удачи!

Ответ 8

Это означает, что сохранить условие проверки, пока оно не будет оценено как false

Ответ 9

Ключом к пониманию этого является то, что синтаксис цикла while в "C" выглядит следующим образом:

while (condition) statement

Где оператор может быть любым действительным выражением "C" . Ниже приведены все действительные утверждения "C" :

{ statements } // a block statement that can group other statements

statement; // a single statement terminated by a ;

; // a null statement terminated by a ;

Итак, по правилам цикла while часть оператора (оператор null в вашем примере) будет выполнять (ничего не делать), пока условие истинно. Это полезно, потому что оно равно ожиданному ожиданию, пока условие не станет ложным. Нехороший способ подождать, но, тем не менее, полезен. Вы можете использовать эту конструкцию, например, если вы хотите подождать, пока другой поток (или обработчик сигнала) не изменит значение переменной перед продолжением.

Ответ 10

Я всегда пишу это как:

while (condition())
    continue;

Итак, очевидно, что это не ошибка. Как говорили другие, это имеет смысл только тогда, когда условие() имеет побочные эффекты.

Ответ 11

Это просто пустой цикл. Это поможет, если вы объясните, что это за условие.

Ответ 12

Код while(condition); является вполне допустимым кодом, хотя его использования мало. Я предполагаю, что condition является переменной, а не функцией — другие здесь обсуждают функциональные condition.

Одно использование while(condition); может блокироваться в ожидании signal, например. SIGHUP, где обработчик сигнала изменяет переменную condition. Однако, как правило, это не лучший способ дождаться сигнала. Обычно в цикле обычно используется sleep, т.е. while(condition) { sleep(1); }.

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

Можно было бы изменить condition на параллельный поток одного и того же процесса, но я думаю, что следует предпочесть сделать это с помощью мьютекса или семафора (т.е. condition может потребоваться больше простого переменная).

Я надеюсь, что это поможет, или, по крайней мере, пищу для размышлений!

Ответ 13

Если оценка условия не изменяет значение, влияющее на само условие, while(condition); представляет собой пустой бесконечный цикл, то есть он никогда не прекратится (и никогда не сделает ничего, кроме потребления процессорного времени).

Ответ 14

это абсолютно правильно. это означает, что вы ничего не делаете в цикле, просто проверяя условие. И это часто встречается во встроенных системных кодах.

Ответ 15

Его просто цикл while без тела выполнения

while(condition);

совпадает с

while(condition)
{
    }

Ответ 16

Просто другое использование, не описанное здесь:

do
{
   if(out_of_memory)
     break;

   if(file_does_not_exist)
     break;

   return ok;

} while(0);

return error;

Это позволяет избежать нескольких обратных вызовов или операторов goto.