2016-07-14 7 views
4

Является ли это циклом, а не циклом или как циклом, а не циклом? Если вы рассчитываете количество циклов в программе, считаете ли вы это?Это цикл?

do { 
    ... 
}while(0); 

Мне любопытно, потому что я работаю с кем-то, кто имеет проект, который требует его, чтобы подсчитать количество петель в программе.

+2

Это цикл while, несмотря на ложное значение, поэтому я предполагаю, что это так. – Jeremy

+0

Это такой же цикл, как 'for (int i = 0; i <1; i ++) {/ * ... * /}' – pmg

+1

@Richie obvoiusly хорошая ссылка, но не обман. –

ответ

7

В стандарте C, C11, глава §6.8.5, итерационных заявления, она указана в

итерация-оператор:

            while (выражение) statement
              doзаявлениеwhile (выражение) ;
              for (выражение неавтоматического; выражение opt; выражение неавтоматического) statement
              for (выражение декларация неавтоматического; выражение неавтоматического) statement

do statement while (expression) ; упоминается, так да, это цикл (итерация) утверждение, независимо от числа итераций делают в конкретной реализации/использования.

FWIW, это петли один раз.

Чтобы добавить еще некоторое уточнение, quoting from Wikipedia, (курсив мой)

Цикл представляет собой последовательность операторов, которая указана раз но может бытьпроводили несколько раз в правопреемство. Код «внутри» цикла (тело цикла, показанного ниже как xxx), выполняется определенное количество раз или один раз для каждого из набора элементов: или до тех пор, пока не будет выполнено какое-либо условие или на неопределенный срок.

+0

Нужно ли все петлевые инструкции также петли? –

+0

@vjb слова могут быть сложными. это, очевидно, оператор _loop_ с итерацией _exactly_ один раз. –

2

В некотором смысле, да, это петля, но на самом деле нет. Это технически цикл, потому что вы используете синтаксис цикла, но то, что вы на самом деле делаете, просто запускает код в вашем «цикле» один раз, а затем разбивается. Я бы не стал считать это циклом, потому что вы не добавляете в свою программу алгоритмическое время выполнения, поэтому нет смысла подсчитывать его как цикл. Примечание: не делайте этого, это бессмысленная и плохая практика кодирования.

EDIT: Кредиты Джереми в комментариях ниже, есть по крайней мере один случай, когда эта конструкция может быть полезна в C: do { ... } while (0) — what is it good for?

+6

Это также чрезвычайно распространенная конструкция, используемая почти для каждого макроса. –

+0

@KerrekSB По крайней мере, можно надеяться. В действительности, многие макросы создаются без этого ... – glglgl

+0

http://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for – Jeremy

0
do { 
    ... 
}while(k); 

Теперь число итераций зависит от значения k, теперь вы не можете сказать что-то вроде своего цикла, только если k!=0 или если k - True.

Так что это в основном петля.

 Смежные вопросы

  • Нет связанных вопросов^_^