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

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

Компилятор пропускает команду... [Delphi, Windows]


Страницы:   1 2 3 4 5

HelloEverybody ©   (2008-03-13 19:01:00) 

Всем доброго времени суток! :)
Не первый раз сталкиваюсь с проблемой в Delphi, когда компилятор в процессе отладки (да и вообще) пропускает команду. Например в

procedureUpdateGraph(Anum, Number:integer);
var
   ...
   num,i,j,maxi,jend:integer;
   ...
begin
...
  i:=0;
  j:=0;
...

Он переменной i присваивает ноль, а переменной j нет. В отладчике вообще пропускает эту строчку. При этом не ругается, как будто все в порядке... никак не пойму в чем дело?
Буду благодарен за совет!


{RASkov}   (2008-03-14 14:31:00) [81]

> [7] Dimaxx ©   (14.03.08 13:59)

var i: Integer
begin
 i:=0;  //ни к чему hint от компилятора
 I:=x+y;
..................
var i: Integer
begin
 X:=I+y; // не инициализирована варнинг от компилятора
..................
var i: integer
begin
 n:=x+y; //i "ваще" нет хинт от компилятора и оптимизатор выкинет из конечного скомпилированного кода...
end;


Плохиш   (2008-03-14 14:21:00) [82]


> Dimaxx ©   (14.03.08 13:59) [7]

Ты вообще понял о чём Семеныч писал? Или так а бы ляпнуть чего?


Dimaxx   (2008-03-14 13:59:00) [83]

Кстати, подобное замечал. В процедуре использую локальную переменную не инициализируя ее (не пишу j:=0). Дельфи выдает предупреждение, что переменная не инициализирована. Лана, ставлю j:=0 - предупреждения нет.


> ...сначала переменной j присваивается ноль, а потом какое-то
> другое значение (явно или неявно) - и между этими двумя
> присвоениями переменная j никак не используется.
> Ясно, что в этом случае присвоение j:=0 смысла не имеет.
> Оптимизирующий компилятор Delphi это обнаруживает и из
> кода его выбрасывает.


Тогда на кой леший сигнализировать об отсутствии j:=0, если оптимизатор выкинет из кода это присваивание??


Семеныч   (2008-03-14 07:02:00) [84]

> HelloEverybody ©   (13.03.08 19:01)

Чтоб стало совсем понятно. У Вас получается что-то вроде этого: сначала переменной j присваивается ноль, а потом какое-то другое значение (явно или неявно) - и между этими двумя присвоениями переменная j никак не используется.

Ясно, что в этом случае присвоение j:=0 смысла не имеет. Оптимизирующий компилятор Delphi это обнаруживает и из кода его выбрасывает. Сообщение об ошибке он в таких случаях не выдает (потому что ошибки в программеи правда нет, а ошибки в логике программиста компилятор оставляет на его же совести), но выдает замечание (hint) или предупреждение (warning).

Которые обязательно нужно читать. И обязательно нужно добиваться того, чтобы их тоже не было. Иначе есть немалый шанс заполучить в программе баги, да еще и трудноуловимые.


sniknik   (2008-03-13 20:14:00) [85]

> Буду благодарен за совет!
просто не нужно делать бессмысленных действий/присваиваний, присвоил чтото переменной? используй ее! и все станет на свои места. а оптимизатор лучше не трогать.


Johnmen   (2008-03-13 19:51:00) [86]

Варнингов может и не быть в данном случае.


Leonid Troyanovsky   (2008-03-13 19:32:00) [87]


> {RASkov} ©   (13.03.08 19:27) [2]

> и "вкуривать" происходящее ;)

подсветив оный варнинг и жамкнув F1 :)

--
Regards, LVT.


{RASkov}   (2008-03-13 19:27:00) [88]

Отключать собственно ничего не нужно, но нужно читать варнинги и "вкуривать" происходящее ;)


Сергей М.   (2008-03-13 19:20:00) [89]

Отключи в свойствах проекта оптимизацию. Удивись.


Страницы:   1 2 3 4 5

Наверх

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