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 нет. В отладчике вообще пропускает эту строчку. При этом не ругается, как будто все в порядке... никак не пойму в чем дело?
Буду благодарен за совет!


Семеныч   (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 (именно на ней сижу). В более поздних версиях этого может и не быть.


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

Наверх

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