![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему возникает такое предупреждение ? [D7]
Warining © (2006-10-31 02:52:00)
for J := 0 to Length(Rec1) -1 do
Rec1.N := j;
if j > 5 then ...
[Warning] UDicFunc.pas(347): FOR-Loop variable 'j' may be undefined after loop
Возникает после того, как пытаюсь использовать j после цикла. А в каком случае J может быть неопределенно и почему ? В чём опасность ?
Anatoly Podgoretsky (2006-10-31 09:09:00) [1]> Что значит любым ? То код на ассемблере смотрел ? Что там, чёрная магия что ли изменит значение переменной ?
Ну смотрел, при том не только в последней версии Дельфи, а во всех и плюс еще ТурбоПаскаль.
Отличается, и даже результаты разные. Часто никакой переменной I нет, обычно регистр и обратный счетчик и совсем не обязательно с теми же начальными и конечными значениями.
А ты что мазохист любитель?
Джо (2006-10-31 08:39:00) [2]Сейчас употребляется почти исключительно в смысле: Да прочтите же, наконец, чертово Руководство!
+
Elen (2006-10-31 08:39:00) [3]
> Джо
Thanks
Джо (2006-10-31 08:38:00) [4]> [23] Elen © (31.10.06 08:33)
> Sorry за профанство - что такое RTFM? (если можно с примерами
> :))
Read The Following Materials, Read The Fucking Manual.
Elen (2006-10-31 08:33:00) [5]
> MetalFan
Sorry за профанство - что такое RTFM? (если можно с примерами :))
MetalFan (2006-10-31 07:54:00) [6]Удалено модератором
Джо (2006-10-31 05:56:00) [7]Точно, умильная тема. Ампломбу полные штаны, вменяемости — как у каракатицы.
Ketmar (2006-10-31 05:00:00) [8]Удалено модератором
Warining (2006-10-31 04:59:00) [9]
> ЮЮ © (31.10.06 04:46) [16]
>
> Это слишком неудобно.
>
> тогда пиши
> if Length(Rec1) > 5
> причем здесь какая-то переменая j?
Это я просто упростил. Там может быть и break внутри цикла. :)
Ketmar (2006-10-31 04:59:00) [10]Удалено модератором
Ketmar (2006-10-31 04:56:00) [11]>[10] Warining 31-Oct-2006, 03:53
>Не видишь, программисты разговаривают.
надеюсь, ты это не о себе? ты даже на среднеразумное-то существо не похож... %-(
ЮЮ (2006-10-31 04:46:00) [12]Это слишком неудобно.
тогда пиши
if Length(Rec1) > 5
причем здесь какая-то переменая j?
мне интересна хоть одна ситуация, когда будет что-нибудь не так. Можете такую создать ?
Для удовлетворения интереса не смотри на хинты и варнинги, а их отсутствие считай за плохой стиль и добивайся максимально возможного количества оных :)
Warining (2006-10-31 04:38:00) [13]
> > А если она мне нужна ?
>
> тогда присвой ей нужное значение
> j := Length(Rec1);
> или, если возможен досрочный выход из цикла по break, то
> используй цикл while
Это слишком неудобно.
А если не присваивать, мне интересна хоть одна ситуация, когда будет что-нибудь не так. Можете такую создать ?
ЮЮ (2006-10-31 04:17:00) [14]
> А если она мне нужна ?
тогда присвой ей нужное значение
j := Length(Rec1);
или, если возможен досрочный выход из цикла по break, то используй цикл while
Германн (2006-10-31 04:14:00) [15]
>
> > Германн © (31.10.06 03:57) [11]
> >
> > Простой ответ - прост. Не употребляй переменную цикла
> вне
> > его границ. И пребудет тебе.
>
> А если она мне нужна ?
>
Ну тогда либо пиши свой компиллятор, либо отключай в Дэлфи оптимизатор!
А лучше всего, продумай свой алгоритм! Бо он может существовать и в Дэлфи и с включённым оптимизатором!
Warining (2006-10-31 04:01:00) [16]
> Германн © (31.10.06 03:57) [11]
>
> Простой ответ - прост. Не употребляй переменную цикла вне
> его границ. И пребудет тебе.
А если она мне нужна ?
Германн (2006-10-31 03:57:00) [17]Простой ответ - прост. Не употребляй переменную цикла вне его границ. И пребудет тебе.
А насчёт "опастности", тут и Ворнинг тебе "предостережение". Если не внемлешь - воэможна ошибка!
Warining (2006-10-31 03:53:00) [18]Удалено модератором
Примечание: Сам скоро кой куда пойдешь, и это будет не в дворники
Ketmar (2006-10-31 03:49:00) [19]>[7] Warining 31-Oct-2006, 03:41
стране не хватает дворников!
Джо (2006-10-31 03:49:00) [20]>
> Вот я и спрашиваю, зачем вообще тогда предупреждать ?
Отвечаю еще раз (может, дойдет):
The for statement assigns the value of initialValue to counter, then executes statement repeatedly, incrementing or decrementing counter after each iteration. (The for...to syntax increments counter, while the for...downto syntax decrements it.) When counter returns the same value as finalValue, statement is executed once more and the for statement terminates. In other words, statement is executed once for every value in the range from initialValue to finalValue. If initialValue is equal to finalValue, statement is executed exactly once. If initialValue is greater than finalValue in a for...to statement, or less than finalValue
in a for...downto statement, then statement is never executed. After the for statement terminates, the value of counter is undefined.