![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Warning: FOR-Loop variable "i" may be undefined after loop
partizan © (2009-05-16 16:26:00)Если после цикла for i:=1 to n использовать переменную i - выдается такое предупреждения, однако все вроде нормально работает, после цикла i имеет значение n+1, как и следовало ожидать.
Просто стало интересно, действительно-ли может выйти ошибка (т.е. может в переменной i оказаться другое значение)?
Anatoly Podgoretsky (2009-05-18 11:50:00) [1]> 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.
BOB16 (2009-05-18 11:38:00) [2]> partizan
Где-то раньше читал, что в Delphi переменные в циклах for() представляют собой в реальности не ячейки памяти, а реальные регистры процессора(ов), а посему не рекомендуется к ним обращаться вне цикла применения.
Юрий Зотов (2009-05-18 03:52:00) [3]> partizan
Видите, какой интересный вопрос Вы задали?
Как много мнений...
AndreyV (2009-05-18 02:48:00) [4]> [5] palva © (16.05.09 19:23)
> Скажем, цикл что-нибудь ищет
...
> Теперь же оптимизатор может изменить
> направление прохождения цикла, или в условиях for i := 10
> to 20 пройти его 10 downto 0.
А если переменная используется в теле цикла? раз поиск чего-то, то наверно она участвует.
KilkennyCat (2009-05-18 02:31:00) [5]
> palva © (16.05.09 19:23) [5]
Мы о разном. В твоем варианте компилятор не ругнется.
Palladin (2009-05-17 08:49:00) [6]
> Андрей (начинающий) (16.05.09 22:15) [6]
> x:=0;for i:=0 to 10 do inc(x);
После этого кода i, скорее всего, будет 0
AndreyV (2009-05-16 22:41:00) [7]> [6] Андрей (начинающий) (16.05.09 22:15)
> Для repeat и while то же самое?
Здесь ты сам управляешь переменными.
Игорь Шевченко (2009-05-16 22:35:00) [8]
> А в каких случаях может?
View|Debug windows|CPU подскажет
Андрей (начинающий) (2009-05-16 22:15:00) [9]
> Игорь Шевченко © (16.05.09 18:37) [3]
А в каких случаях может? Для repeat и while то же самое? Т.е. после кода
x:=0;
for i:=0 to 10 do inc(x);
i может быть не равно 10? В справке ничего похожего не нашел.
palva (2009-05-16 19:23:00) [10]
> А мне просто интересно, действительно ты собираешься использовать эту переменную?
А почему бы не использовать? Скажем, цикл что-нибудь ищет, при удаче выходит по break или goto. Тогда эта переменная содержит номер найденного. Если n+1, значит не нашли. Стандартный прием на фортране. Да раньше и на паскале так можно было. Насколько я помню. Теперь же оптимизатор может изменить направление прохождения цикла, или в условиях for i := 10 to 20 пройти его 10 downto 0.
Vinum (2009-05-16 19:14:00) [11]>после цикла i имеет значение n+1, как и следовало ожидать.
А я ожидал i=n :)
Игорь Шевченко (2009-05-16 18:37:00) [12]
> действительно-ли может выйти ошибка (т.е. может в переменной
> i оказаться другое значение)?
действительно может
Anatoly Podgoretsky (2009-05-16 16:56:00) [13]> partizan (16.05.2009 16:26:00) [0]
Это не так, это частный случай.
KilkennyCat (2009-05-16 16:49:00) [14]А мне просто интересно, действительно ты собираешься использовать эту переменную?