Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

А мне просто интересно, действительно ты собираешься использовать эту переменную?


Наверх

Титульная страница Поиск, карта сайта Написать письмо