Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.05;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1242631469
evgenij
2009-05-18 11:24
2009.07.05
Формат DateTime в запросе


2-1242370294
alex810
2009-05-15 10:51
2009.07.05
Тип TTime


15-1241124866
TStas
2009-05-01 00:54
2009.07.05
Насколько побитовые операции быстрее простого деления?


15-1241410854
TUser
2009-05-04 08:20
2009.07.05
А где в метро гермозатворы?


2-1242380905
Ponchic
2009-05-15 13:48
2009.07.05
работает ли такой запрос в Ацесе?