![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компилятор пропускает команду... [Delphi, Windows]
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]Отключи в свойствах проекта оптимизацию. Удивись.