Итак, вот вопрос: могу ли я увеличиваем переменную i
внутри for
цикла ?:Приращение внутренней переменной счетчика внутри цикла для
for(int i = 0; i < 1000; i++)
{
i++; // is this legal? if not what is the alternative?
}
Итак, вот вопрос: могу ли я увеличиваем переменную i
внутри for
цикла ?:Приращение внутренней переменной счетчика внутри цикла для
for(int i = 0; i < 1000; i++)
{
i++; // is this legal? if not what is the alternative?
}
Абсолютно легальные, но не очень интуитивным.
Рассмотрите возможность использования цикла while вместо этого, если вам нужно манипулировать своим циклом таким образом (это просто явная вещь кода, а не юридическая вещь).
Если мы посмотрим на проект стандарта C99 он говорит следующее о для петли в разделе 6.8.5.3
для постановки:
Изложение
для (п-1; выражение -2; выражение-3)
ведет себя следующим образом: выражение expression-2 является управляющим выражением, которое оценивается . для каждого выполнения тела цикла. Выражение-выражение оценивается как выражение void после каждого выполнения тела цикла. Если предложение-1 является объявлением , область любых объявляемых им идентификаторов - это остальная часть декларации и весь цикл, включая два других выражения; это достигается в порядке выполнения перед первой оценкой управляющего выражения. Если выражение-1 является выражением, оно равно , которое оценивается как выражение void перед первой оценкой управляющего выражения. 137)
Так что, если мы разбираем этот текст вашего для цикла будет примерно эквивалентно следующему:
{
int i = 0 ; // clause 1
while(i < 1000) //expression 2
{
i++ ; // statement
i++ ; // expression 3
}
}
который действителен код, но вы, вероятно, не писать код таким образом, если вы переводили его вручную.
Это совершенно законно. Ты это пробовал? – Baldrick
Да, это как-то не работает, может быть, я делаю что-то неправильно ... Но цель вопроса состояла в том, чтобы спросить, действительно ли это хорошая практика, если это возможно. –
Что не работает? Возможно, обновите свой вопрос тем, что кажется неожиданным в результате поведения. – Baldrick