Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
ВнизWarning: FOR-Loop variable "i" may be undefined after loop Найти похожие ветки
← →
partizan (2009-05-16 16:26) [0]Если после цикла for i:=1 to n использовать переменную i - выдается такое предупреждения, однако все вроде нормально работает, после цикла i имеет значение n+1, как и следовало ожидать.
Просто стало интересно, действительно-ли может выйти ошибка (т.е. может в переменной i оказаться другое значение)?
← →
KilkennyCat © (2009-05-16 16:49) [1]А мне просто интересно, действительно ты собираешься использовать эту переменную?
← →
Anatoly Podgoretsky © (2009-05-16 16:56) [2]> partizan (16.05.2009 16:26:00) [0]
Это не так, это частный случай.
← →
Игорь Шевченко © (2009-05-16 18:37) [3]
> действительно-ли может выйти ошибка (т.е. может в переменной
> i оказаться другое значение)?
действительно может
← →
Vinum (2009-05-16 19:14) [4]>после цикла i имеет значение n+1, как и следовало ожидать.
А я ожидал i=n :)
← →
palva © (2009-05-16 19:23) [5]
> А мне просто интересно, действительно ты собираешься использовать эту переменную?
А почему бы не использовать? Скажем, цикл что-нибудь ищет, при удаче выходит по break или goto. Тогда эта переменная содержит номер найденного. Если n+1, значит не нашли. Стандартный прием на фортране. Да раньше и на паскале так можно было. Насколько я помню. Теперь же оптимизатор может изменить направление прохождения цикла, или в условиях for i := 10 to 20 пройти его 10 downto 0.
← →
Андрей (начинающий) (2009-05-16 22:15) [6]
> Игорь Шевченко © (16.05.09 18:37) [3]
А в каких случаях может? Для repeat и while то же самое? Т.е. после кода
x:=0;
for i:=0 to 10 do inc(x);
i может быть не равно 10? В справке ничего похожего не нашел.
← →
Игорь Шевченко © (2009-05-16 22:35) [7]
> А в каких случаях может?
View|Debug windows|CPU подскажет
← →
AndreyV © (2009-05-16 22:41) [8]> [6] Андрей (начинающий) (16.05.09 22:15)
> Для repeat и while то же самое?
Здесь ты сам управляешь переменными.
← →
Palladin © (2009-05-17 08:49) [9]
> Андрей (начинающий) (16.05.09 22:15) [6]
> x:=0;for i:=0 to 10 do inc(x);
После этого кода i, скорее всего, будет 0
← →
KilkennyCat © (2009-05-18 02:31) [10]
> palva © (16.05.09 19:23) [5]
Мы о разном. В твоем варианте компилятор не ругнется.
← →
AndreyV © (2009-05-18 02:48) [11]> [5] palva © (16.05.09 19:23)
> Скажем, цикл что-нибудь ищет
...
> Теперь же оптимизатор может изменить
> направление прохождения цикла, или в условиях for i := 10
> to 20 пройти его 10 downto 0.
А если переменная используется в теле цикла? раз поиск чего-то, то наверно она участвует.
← →
Юрий Зотов © (2009-05-18 03:52) [12]> partizan
Видите, какой интересный вопрос Вы задали?
Как много мнений...
← →
BOB16 (2009-05-18 11:38) [13]> partizan
Где-то раньше читал, что в Delphi переменные в циклах for() представляют собой в реальности не ячейки памяти, а реальные регистры процессора(ов), а посему не рекомендуется к ним обращаться вне цикла применения.
← →
Anatoly Podgoretsky © (2009-05-18 11:50) [14]> BOB16 (18.05.2009 11:38:13) [13]
Зачем гадать?
Справка однозначно говорит, что After the for statement terminates (provided this was not forced by a break or an exit procedure), the value of counter is undefined.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c