2013-06-30 2 views
4

Я задаю этот вопрос только ради знания (потому что я думаю, что это не имеет ничего общего с новичком, как я).
Я читал, что C-программисты предпочитаютПредпочтение «for (;;)« over »while (1)«

for(; ;) {....} 

над

while(1) {....} 

для бесконечного цикла по соображениям эффективности. Верно ли, что одна форма цикла более эффективна, чем другая, или это просто вопрос стиля?

+0

Где вы это читали? – PinnyM

+3

Я не думаю, что есть важные причины. Лично я считаю, что первое требует меньше магических констант, которые мне нравятся. –

+0

@PinnyM В книге программирования C. – haccks

ответ

6

Обе конструкции эквивалентны поведению.

Что касается предпочтения:

Язык программирования C, Kernighan & Ричи,

использует форму

for (;;) 

для бесконечного цикла.

Практика программирования, Кернигана & Пайк,

также предпочитает

for (;;)

«Для бесконечного цикла мы предпочитаем для (;;), но в то время как (1) также популярны. Не используйте ничего, кроме этих форм ».

PC-Lint

также предпочитает

for (;;):

716 в то время как (1) ... - Конструкция формы в то время как (1) .. . был найден. Принимая во внимание, что это представляет собой константу в контексте, ожидающем логического, это может отражать политику программирования , в которой бесконечные петли префиксны этой конструкцией. Следовательно, ему присваивается отдельный номер и помещается в информационную категорию. Более обычная форма префикса бесконечной петли для (;;)

Один из обоснования (может быть, не самое главное, я не знаю), что исторически for (;;) предпочтение было отдано while (1), что некоторые старые компиляторы бы сгенерировать тест для конструкции while (1).

Другие причины: for(;;) является кратчайшим форма (в количестве символов), а также for(;;) не содержит магическое число (как было отмечено @KerrekSB в комментариях OP вопрос).

+1

Еще одна возможная причина для предпочтения версии 'for': MSVC предупреждает:« условное выражение является постоянным »для' while (1) ', но удовлетворено' for (;;) ' – simonc

+0

@ouah; Мужчина! Откуда вы собираете эту информацию? +1 – haccks

+0

Рад узнать хотя бы о какой-то причине. – haccks