![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переменная по STEPу [D7, Win95/98, WinXP]
ASoft © (2004-08-06 04:43:00)Здравствуйте!
В процедуре OnMouseUp я использую цикл
For i : = 0 to m do
If PtinRect(MyRect(XX,YY,Width,Height),
point(MyOb.X, MyOb.Y)) then
begin
.....
end;
{ m=, например, 10,
MyRect - функция, MyOb - объект на экране(окне) }
При рохождение цикла в STEP(по F7), переменная i равна
совсем не тому, что должно, по идее, т.е. не 0-10, а большим
положительным числам. В чем тут может быть
ошибка? В каких случаях такое может происходить?
Спасибо
Германн (2004-08-10 03:24:00) [1]2 Fay © (09.08.04 07:48) [27]
Ну это то вообще-то к "потрепаться".
Но меня учили так - Если произносишь утверждение, в котором не уверен, или сие утверждение противоречит мнению собеседника, то стоит добавить "Is'nt it", что может быть переведено как "не так ли?", а имея в виду, что можешь сам ошибаться, в последнем случае "Is'nt it" имеет значение - ("или я не прав?") ("или это не так?")
Fay (2004-08-09 07:48:00) [2]2 Германн © (09.08.04 02:46) [26]
>> "is'nt it" - есть "(No,) It isn't"
А как хоть это переводится? В хелпе нету...
8)
Германн (2004-08-09 02:46:00) [3]А почему тогда "is not"? Какие вескиепричины тому? Или все из разряда "лопай, что дают"?
2 AP (08.08.04 13:10) [25]
Кстати, те кто учил меня аглицкому говорили, что отрицательный ответ на "is'nt it" - есть "(No,) It isn't".
Anatoly Podgoretsky (2004-08-08 13:10:00) [4]is not
Германн (2004-08-08 03:22:00) [5]2 Anatoly Podgoretsky © (07.08.04 13:14) [23]
Ты спрашиваешь о "встроенном отладчике" или о "внешнем"?
По сабжу - речь идет о "встроенном", но ведь и он и компиллятор имеют одни и те же входные параметры. Имхо, они имеют всевозможности, чтобы адекватнореагировать на все ситуации. Is'nt it?
Anatoly Podgoretsky (2004-08-07 13:14:00) [6]Германн © (07.08.04 03:33) [21]
Предлагаешь отладчику заняться декомпиляцией и рефакторингом?
ASoft (2004-08-07 05:43:00) [7]Кстати, когда я убрал функцию MyRect (см. ASoft[0] ) из
puplic в private, то по F7, в точке прерывания, подсказка переменной i(счетчик) стала нормальной, как положено - от 0 до 10. На счет того, что иногда в цикле бывает странность: вместо
0..10, переменная считается наоборот от 10 до 0, хотя установлен оператор "to".
Германн (2004-08-07 03:33:00) [8]Кстати интересно.
Компиллятор Дельфи оказывается достаточно умным, чтобы не использовать переменную цикла как отдельную переменную!
Почему же IDE не может создать при отладке "отображение переменной цикла", которое и удовлетворяет тексту программы и соответствует коду программы?"
Anatoly Podgoretsky (2004-08-06 19:05:00) [9]Есть использование, это приведт к нужному порядку, в тоже время ничего не говорит об переменных, например оптимизатор модет завести два регистра и один из них наращивать от 1 до пяти, а второй уменьшать от 5 до нудя, или же из константы 6 вычитать этот второй регистр - 5, 4...1
begin...end (2004-08-06 18:40:00) [10]
> [14] Бином Ньютоныч (06.08.04 16:29)
Да, понятно, просто [13] было ответной реакцией на [9]
Digitman (2004-08-06 18:10:00) [11]
> Fay © (06.08.04 17:59) [16]
всяк думает в меру своей испорченности)
Digitman (2004-08-06 18:09:00) [12]
> ASoft (06.08.04 17:35) [15]
> почему
> по F7 - step, при наведении курсора на
> счетчик в цикле от 0 до 10 показывает, например 64622, а
> не 0..10
потому что ячейки памяти с "именем" i не существует
компилятор волен ассоциировать идентификатор i с тем РОН, который он посчитает нужным выбрать в кач-ве "временного хранителя" значения сч-ка цикла .. в то же время компилятор волен в нужный момент сохранив значение этого РОН в стеке использовать его временно для иных целей
Fay (2004-08-06 17:59:00) [13]2Digitman © (06.08.04 11:21) [11]
А я-то решил, что РОН - ПОХ 8). И весьма удивился
ASoft (2004-08-06 17:35:00) [14]Господа,
я вообще-то спросил только, почему
по F7 - step, при наведении курсора на
счетчик в цикле от 0 до 10 показывает, например 64622, а
не 0..10. Хотя в прорцедуре и в самом цикле, вроде бы,
все нормально.
Но дискуссия интересна сама по себе...
Бином Ньютоныч (2004-08-06 16:29:00) [15]>begin...end © (06.08.04 12:44) [13]
Не приведет ни к 2, ни к 5, ни к 4. Первым будет 1 - переменная используется внутри цикла.
begin...end (2004-08-06 12:44:00) [16]
> [9] Anatoly Podgoretsky © (06.08.04 10:29)
Неужели так категорично?
Интересно, а Вы такую ситуацию считаете правильной?
Т.е. если код
for I := 1 to 5 do
ShowMessage(IntToStr(I));
приведёт вначале к появлению сообщения '2', то это - в порядке вещей?
Anatoly Podgoretsky (2004-08-06 11:52:00) [17]ASoft (06.08.04 11:16) [10]
Отсюда не делай никаких предположений об внутренней организации, важно лишь указаное, а какой "порядок" дело компилятора и оптимизатора.
Digitman (2004-08-06 11:21:00) [18]
> ASoft (06.08.04 11:16) [10]
РОН = Регистр(ы) Общего Назначения (процессора)
ASoft (2004-08-06 11:16:00) [19]Digitman >> [8]
Стараюсь не "испоганить"... Что такое РОН, объясни тупому.
Anatoly Podgoretsky >> [9]
>> "Выражение For i : = 0 to m означает только одно выполнить цикл End - Start + 1 раз и ничего более" >>
Само-собой!
Спасибо всем.
В общем, понятно.
Anatoly Podgoretsky (2004-08-06 10:29:00) [20]Выражение For i : = 0 to m означает только одно выполнить цикл End - Start + 1 раз и ничего более