![]() |
| ||
|
|
Новости |
Поиск |
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 нет. В отладчике вообще пропускает эту строчку. При этом не ругается, как будто все в порядке... никак не пойму в чем дело?
Буду благодарен за совет!
Семеныч (2008-03-15 22:28:00) [41]> Dimaxx
Оххх... много-много раз я думал так же, как и Вы - дурак, мол этот компилятор, плюется варнингами почем зря.
Но почему-то каждый раз при внимательном разборе кода оказывалось, что дурак - не копилятор. И еще ни разу не было наоборот.
:о)
Он и правда не дурак, поверьте. И как только я это понял и стал добиваться абсолютно чистой компиляции, он сэкономил мне массу времени и нервов.
{RASkov} (2008-03-14 22:09:00) [42]> [46] Dimaxx © (14.03.08 22:04)
> Нажать "Обновить" и прочитать не много времени надо... :)
Но чтобы вести аргументированный спор время все-таки нужно....
иначе... вообщем знаешь уже, я тебе говорил на что ты и твой спор похожи... ;)
Anatoly Podgoretsky (2008-03-14 22:04:00) [43]> {RASkov} (14.03.2008 21:49:43) [43]
Да давно уже говорит
Dimaxx (2008-03-14 22:04:00) [44]Кстати, походу проблема у меня в Д5 (система стоит давно, дельфи тоже - че тока на нее не вешал) - заменил N на 0 в TVInsert. Компилятор опять ругнулся (с чего бы вдруг?). Сохранил, закрыл, открыл снова. Больше не ругается. Снес Д5, вычистил реестр, поставил с нуля. Открыл проект - не ругается. Ну я же не слепой? Или мне мерещится?...
> с 13:59 споришь и, наверняка, что еще дальше будешь спорить
> :) а говоришь времени нет )
Я работаю, а браузер открыт постоянно. Нажать "Обновить" и прочитать не много времени надо... :)
{RASkov} (2008-03-14 21:57:00) [45]> [42] Dimaxx © (14.03.08 21:49)
> а писать времени нет, чтобы продемонстрировать
с 13:59 споришь и, наверняка, что еще дальше будешь спорить :) а говоришь времени нет )
{RASkov} (2008-03-14 21:50:00) [46]> [42] Dimaxx © (14.03.08 21:49)
Значит [33]? :)
{RASkov} (2008-03-14 21:49:00) [47]> [40] Anatoly Podgoretsky © (14.03.08 21:48)
говорит, что пример не удачный ;)
Dimaxx (2008-03-14 21:49:00) [48]Я же говорю - пример не тот. Я просто наскоро просмотрел последние проекты. Ну нет у меня щас под рукой кода нужного, а писать времени нет, чтобы продемонстрировать.
Anatoly Podgoretsky (2008-03-14 21:48:00) [49]> Dimaxx (14.03.2008 21:41:36) [36]
Я тоже не люблю неинициализированных переменных. И компилятор солидарен.
Anatoly Podgoretsky (2008-03-14 21:48:00) [50]> Dimaxx (14.03.2008 21:31:34) [34]
Это где же инициализировано
N:=TreeView1.TVInsert(J,N - это что?
{RASkov} (2008-03-14 21:44:00) [51]> [36] Dimaxx © (14.03.08 21:41)
> Но факт есть факт - не любит компилятор неинициализированных
> переменных.
Вообщето вы здесь с компилятором - правы, но ты споришь выше не об этом :)
{RASkov} (2008-03-14 21:42:00) [52]> [36] Dimaxx © (14.03.08 21:41)
Мыло мачало... :(
:о)
{RASkov} (2008-03-14 21:41:00) [53]> [34] Dimaxx © (14.03.08 21:31)
Ну и кто теперь дурак? Компилятор или.... ;)
Dimaxx (2008-03-14 21:41:00) [54]Тут да, пример неудачный. Не заметил сразу. Но факт есть факт - не любит компилятор неинициализированных переменных.
{RASkov} (2008-03-14 21:37:00) [55]> [34] Dimaxx © (14.03.08 21:31)
А теперь внимательно глянь на эту строку
> N:=TreeView1.TVInsert(J, N,Format('%s (%d)',[Tree.Items[I].Name, Tree.Items[I].Tag]));
как ты думаешь чему здесь должно быть ровно выделенная N???!!! это если с закоментированной строкой //N:=0;
Dimaxx (2008-03-14 21:31:00) [56]Не путаю. Вот нашел пример (KOL). Tree заполнен данными в другой процедуре. Далее они динамически заполняются.
var Tree: PTree;
procedure TForm1.Button1Click(Sender: PObj);
var I,J,N: integer;
begin
TreeView1.BeginUpdate;
TreeView1.Clear;
J:=TreeView1.TVInsert(0,0,'Root');
N:=0;
for I:=0 to pred(Tree.Count) do
begin
N:=TreeView1.TVInsert(J,N,Format('%s (%d)',[Tree.Items[I].Name,Tree.Items[I].Tag]));
if Tree.Items[I].Count>0 then SetTree(Tree.Items[I],N);
end;
TreeView1.EndUpdate;
end;
Если так компилировать - все ОК, но стоит закомментировать N:=0как компилятор ругается на неинициализированную переменную. Какая ему разница, если в цикле переменной присваивается конкретное значение? Код рабочий в обоих вариантах.
{RASkov} (2008-03-14 21:17:00) [57]> [32] Dimaxx © (14.03.08 21:15)
Значит, давай договоримся, что ты что-то путаешь, ок? ;)
Dimaxx (2008-03-14 21:15:00) [58]Да нет уже этого кода - ессно бы привел...
{RASkov} (2008-03-14 20:27:00) [59]> [30] Dimaxx © (14.03.08 19:56)
А ты приведи код один в один, где ты в чем-то сомневаешься, тогда и поговорить нормально можно будет, иначе ты кажешься дураком, который доказывает сам не знает что... ;) не прими за наезд...
Dimaxx (2008-03-14 19:56:00) [60]
> Зачем спорить в том, что самому кажется глупым?
Так вот именно эта глупость и непонятна! Ладно если бы спрашивал непонимая где сам накосячил и доказывал бы свою правоту. Я как раз и хочу понять - почему иногда компилятор выдает такую чушь.
> все работает
Ну ты даешь! А я что - доказывал, что не работает? Именно что работает! Но почему компилятору не нравится так, а так (практически тоже самое, но с обнулением переменной до использования) сойдет - непонятно. Читай плз внимательнее.
> другая лапша, в которой ошибки
Какая другая? В простом заполнении listview данными из record'а без намека на целочисленную переменную (кроме переменной цикла)? Не смеши... :)
> что там может скрываться для получения варнинга
Я это все видел и знаю об этом. Я спросил о том, что непонятно: зачем компилятор предупреждает об отсутствии инициализации переменной, если оптимизатор все равно этот код инициализации (i:=0) выкинет? Логики 0! Вполне возможно это "подарки" Д5 (именно на ней сижу). В более поздних версиях этого может и не быть.