Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
ВнизПочему возникает такое предупреждение ? Найти похожие ветки
← →
Warining (2006-10-31 02:52) [0]
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 может быть неопределенно и почему ? В чём опасность ?
← →
Джо © (2006-10-31 03:01) [1]> А в каком случае J может быть неопределенно и почему
В стандарте языка Делфи значение счетчика-переменной цикла после выполнения цикла не определено, т.е., может быть любым.
> В чём опасность ?
Опасность есть только в том случае, если не обращать внимания на стандарт языка и использовать ее после выполнения цикла.
← →
Джо © (2006-10-31 03:02) [2]Т.е., оно вовсе не обязано быть равным последнему значению счетчика в цикле.
← →
Германн © (2006-10-31 03:05) [3]
>
> Warining (31.10.06 02:52)
>
>
> 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 может быть неопределенно и почему ?
> В чём опасность ?
Это даже и не Warning, а в большинстве случаев Error!
Переменная цикла существует (и то не всегда она работает так, как ты этого хотел) только внутри самого цикла.
После цикла она "не определена"
← →
Warining (2006-10-31 03:26) [4]
> Джо © (31.10.06 03:01) [1]
>
> > А в каком случае J может быть неопределенно и почему
>
> В стандарте языка Делфи значение счетчика-переменной цикла
> после выполнения цикла не определено, т.е., может быть любым.
Что значит любым ? То код на ассемблере смотрел ? Что там, чёрная магия что ли изменит значение переменной ?
> Джо © (31.10.06 03:02) [2]
>
> Т.е., оно вовсе не обязано быть равным последнему значению
> счетчика в цикле.
Вот она ! Магия Дельфи !
← →
Джо © (2006-10-31 03:30) [5]Зачем магия? Ее нет. Оптимизатор заместо нее.
← →
Джо © (2006-10-31 03:32) [6]Да и стандарт языка — весчь неумолимая...
← →
Warining (2006-10-31 03:41) [7]
> Германн © (31.10.06 03:05) [3]
> Это даже и не Warning, а в большинстве случаев Error!
> Переменная цикла существует (и то не всегда она работает
> так, как ты этого хотел) только внутри самого цикла.
> После цикла она "не определена"
Ты вроде бы более здравомыслящий.
Это именно Ворнинг, а не Еррор, а значит ничего опасного. Вот я и спрашиваю, зачем вообще тогда предупреждать ?
Кстати если поставить перед циклом j := 1;, то предупреждение останется.
← →
Джо © (2006-10-31 03:49) [8]>
> Вот я и спрашиваю, зачем вообще тогда предупреждать ?
Отвечаю еще раз (может, дойдет):
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.
← →
Ketmar © (2006-10-31 03:49) [9]>[7] Warining 31-Oct-2006, 03:41
стране не хватает дворников!
← →
Warining (2006-10-31 03:53) [10]Удалено модератором
Примечание: Сам скоро кой куда пойдешь, и это будет не в дворники
← →
Германн © (2006-10-31 03:57) [11]Простой ответ - прост. Не употребляй переменную цикла вне его границ. И пребудет тебе.
А насчёт "опастности", тут и Ворнинг тебе "предостережение". Если не внемлешь - воэможна ошибка!
← →
Warining (2006-10-31 04:01) [12]
> Германн © (31.10.06 03:57) [11]
>
> Простой ответ - прост. Не употребляй переменную цикла вне
> его границ. И пребудет тебе.
А если она мне нужна ?
← →
Германн © (2006-10-31 04:14) [13]
>
> > Германн © (31.10.06 03:57) [11]
> >
> > Простой ответ - прост. Не употребляй переменную цикла
> вне
> > его границ. И пребудет тебе.
>
> А если она мне нужна ?
>
Ну тогда либо пиши свой компиллятор, либо отключай в Дэлфи оптимизатор!
А лучше всего, продумай свой алгоритм! Бо он может существовать и в Дэлфи и с включённым оптимизатором!
← →
ЮЮ © (2006-10-31 04:17) [14]
> А если она мне нужна ?
тогда присвой ей нужное значение
j := Length(Rec1);
или, если возможен досрочный выход из цикла по break, то используй цикл while
← →
Warining (2006-10-31 04:38) [15]
> > А если она мне нужна ?
>
> тогда присвой ей нужное значение
> j := Length(Rec1);
> или, если возможен досрочный выход из цикла по break, то
> используй цикл while
Это слишком неудобно.
А если не присваивать, мне интересна хоть одна ситуация, когда будет что-нибудь не так. Можете такую создать ?
← →
ЮЮ © (2006-10-31 04:46) [16]Это слишком неудобно.
тогда пиши
if Length(Rec1) > 5
причем здесь какая-то переменая j?
мне интересна хоть одна ситуация, когда будет что-нибудь не так. Можете такую создать ?
Для удовлетворения интереса не смотри на хинты и варнинги, а их отсутствие считай за плохой стиль и добивайся максимально возможного количества оных :)
← →
Ketmar © (2006-10-31 04:56) [17]>[10] Warining 31-Oct-2006, 03:53
>Не видишь, программисты разговаривают.
надеюсь, ты это не о себе? ты даже на среднеразумное-то существо не похож... %-(
← →
Ketmar © (2006-10-31 04:59) [18]Удалено модератором
← →
Warining (2006-10-31 04:59) [19]
> ЮЮ © (31.10.06 04:46) [16]
>
> Это слишком неудобно.
>
> тогда пиши
> if Length(Rec1) > 5
> причем здесь какая-то переменая j?
Это я просто упростил. Там может быть и break внутри цикла. :)
← →
Ketmar © (2006-10-31 05:00) [20]Удалено модератором
← →
Джо © (2006-10-31 05:56) [21]Точно, умильная тема. Ампломбу полные штаны, вменяемости — как у каракатицы.
← →
MetalFan © (2006-10-31 07:54) [22]Удалено модератором
← →
Elen © (2006-10-31 08:33) [23]
> MetalFan
Sorry за профанство - что такое RTFM? (если можно с примерами :))
← →
Джо © (2006-10-31 08:38) [24]> [23] Elen © (31.10.06 08:33)
> Sorry за профанство - что такое RTFM? (если можно с примерами
> :))
Read The Following Materials, Read The Fucking Manual.
← →
Elen © (2006-10-31 08:39) [25]
> Джо
Thanks
← →
Джо © (2006-10-31 08:39) [26]Сейчас употребляется почти исключительно в смысле: Да прочтите же, наконец, чертово Руководство!
+
← →
Anatoly Podgoretsky © (2006-10-31 09:09) [27]> Что значит любым ? То код на ассемблере смотрел ? Что там, чёрная магия что ли изменит значение переменной ?
Ну смотрел, при том не только в последней версии Дельфи, а во всех и плюс еще ТурбоПаскаль.
Отличается, и даже результаты разные. Часто никакой переменной I нет, обычно регистр и обратный счетчик и совсем не обязательно с теми же начальными и конечными значениями.
А ты что мазохист любитель?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.046 c