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

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

Переменная по STEPу [D7, Win95/98, WinXP]


Страницы:   1 2

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 раз и ничего более


Страницы:   1 2

Наверх

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