В c или c ++ могут все oop иметь разделы "do" и "while"? - PullRequest
1 голос
/ 21 января 2020

Учитывая общий оператор while() в циклах do ... while и while, а также способ, которым место, где тело while l oop будет заменено точкой с запятой на do ... while, как если это сложный оператор, превращающийся в пустой оператор (или заканчивающий строку длинного оператора):

Позволяет ли синтаксис в любом из языков семейства C делать "делать, когда и пока", l oop с обоими телами?

Предположительно, семантика будет одной l oop с некоторыми операциями, выполняемыми до проверки, а некоторые после.

Например:

do {
  foo();
} while ( baz() == true ){
  bar();
}

foo() будет всегда происходит один раз, но bar() произойдет только после того, как baz() вернет true.

Ответы [ 4 ]

5 голосов
/ 21 января 2020

Они не могут быть использованы одновременно. Синтаксис:

, а ( выражение ) оператор

или:

do оператор while ( выражение );

Так что вы можете Не делайте это, как в вашем примере:

do {
  foo();
} while ( baz() == true ){
  bar();
}

Но вы можете приблизиться к этому:

do {
  foo();
  if (!baz()) break;
  bar();
} while (1);
4 голосов
/ 21 января 2020

Вы, похоже, просите

do
    statement0
while (condition)
    statement1

Это может быть выполнено с помощью:

do
{
    statement0
    if (!(condition)) break;
    statement1
} while (1);
3 голосов
/ 21 января 2020

В C или C ++, может ли al oop иметь разделы "do" и "while"?

Допускает ли синтаксис в каком-либо из языков семейства C "делать, пока и пока" l oop с обоими телами определены?

Нет, у вас может быть время l oop или задание l oop. В то время как l oop отличается от do-while l oop и наоборот.

Вы не можете объединить оба типа вместе.


Это может быть только do-while l oop:

do 
{ 
    /* statements  */ 
}while(condition);

или некоторое время l oop:

while(condition)
{
    /* statements */
};

В то время как l oop, вы выполняете операторы после определенное условие. В то время как l oop вы хотя бы один раз пробегаете l oop, пока не достигнете условия. Но центр обоих циклов в конце - один и тот же тип операторов / l oop body. Таким образом, не имеет смысла добавлять второй.


Когда вы используете do-while l oop, как вы сделали:

do {
  foo();
} while ( baz() == true ){
  bar();
}

область, ограниченная {} после выполнения операции l oop условие:

{
  bar();
}

не является частью выполнения операции l oop.


Он будет обрабатываться как только набор операторов в отдельном блоке области действия, который будет выполняться после выполнения do-while-l oop.

Но даже тогда компилятор пропустит это, только если вы установили точку с запятой ; после условия do-while-l oop:

do {
  foo();
} while ( baz() == true );{      // Note the semicolon ";".
  bar();
}

С предоставленным код:

do {
  foo();
} while ( baz() == true ){
  bar();
}

компилятор выдаст ошибку.

0 голосов
/ 21 января 2020

Блоки do и while в одном и том же l oop недопустимы в C или C ++. Это не разрешено ни на каком другом языке программирования.

...