Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1162649056
Mihalich
2006-11-04 17:04
2006.11.19
MS SQL server


6-1151785308
ZLOFENIX
2006-07-02 00:21
2006.11.19
использование сокс


2-1162462779
pasha_golub
2006-11-02 13:19
2006.11.19
Как поймать сообщение посланное для Application.Handle?


6-1151406325
alex_pv1
2006-06-27 15:05
2006.11.19
Установить IP


15-1162559111
ArtemESC
2006-11-03 16:05
2006.11.19
Фильм "Остаться в живых"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский