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

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

Почему возникает такое предупреждение ? [D7]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

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