Что происходит, когда ставится точка с запятой после условия цикла while? - PullRequest
10 голосов
/ 03 января 2012

Я несколько раз сталкивался с подобной ситуацией:

while (true) {

while (age == 5); //What does this semi-colon indicate?
//Code
//Code
//Code

}

while(true) указывает на то, что это бесконечный цикл, но мне трудно понять, что такое точка с запятой после while условие выполнено, не эквивалентно ли это?:

while (age == 5) { }

//Code
//Code

Другими словами, означает ли это, что цикл while бесполезен, поскольку он никогда не входит в блок?

Ответы [ 4 ]

22 голосов
/ 03 января 2012
while (age == 5);     // empty statement

эквивалентно

while (age == 5) { }  // empty block

Обновление: Даже если нет тела для выполнения, это не означает, что цикл завершается. Вместо этого он будет просто циклически повторяться по условию (, которое может иметь или полагаться на побочные эффекты ), пока не будет выполнено. Вот эквивалентная форма с goto:

loop:
if (age == 5)
  goto loop;

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

Я считаю использование ; для "пустого блока" пустого оператора и сомнительной конструкции для использования из-за таких проблем:

while (age == 5); {
   Console.WriteLine("I hate debugging");
}

(я видел эту ошибку несколько раз раньше, когда был добавлен новый код.)

Удачного кодирования.

1 голос
/ 03 января 2012

заявление, состоящее только из

;

- пустое утверждение. Это то же самое, что блок (также называемый составным оператором), в котором ничего нет

{
}

Они оба не выполняют никаких операций.

1 голос
/ 03 января 2012

while (age == 5); застревает в бесконечном цикле.В с ; это нулевой терминатор.Компилятор предполагает, что вышеприведенный цикл имеет только один оператор ;, который приводит к бесконечному повторению цикла.

0 голосов
/ 03 октября 2012

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

Когда мы пишем

while(true);

Это означает цикл while для оператора, который ничего не делает.Это похоже на оператор

while(true)
i++;

Здесь не null, но в предыдущем случае оператор был null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...