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


Anatoly Podgoretsky   (2008-03-14 18:54:00) [61]

> Dimaxx  (14.03.2008 18:01:26)  [26]

В таком виде не скомпилируется, надо или убрать многоточия или замаскировать это, за тебя это уже сделали и доказали, что ты вешаешь лапшу на уши, все работает, а вот у тебя наверняка другая лапша, в которой ошибки.


clickmaker   (2008-03-14 18:12:00) [62]


> [26] Dimaxx ©   (14.03.08 18:01)

ну так тебе Семеныч тут уже привел примеры, что там может скрываться для получения варнинга.


{RASkov}   (2008-03-14 18:08:00) [63]

> Dimaxx ©

Вот и я в твоем присутствии чувствую себя таким умным :)
Зачем спорить в том, что самому кажется глупым?


Dimaxx   (2008-03-14 18:01:00) [64]


> а в [10] разве не такой вид?

За многоточием может скрываться десяток строк кода. В [17] у тебя просто три строки - в таком виде ессно данного варнинга не увидишь. :)


Dimaxx   (2008-03-14 17:58:00) [65]


> Лапшу на уши не вешай.

Сначала попробуй - потом заявляй. :)

Народ, что в коде идет работа по выводу данных в listview (простой вывод в цикле). i - переменная для временного хранения промежуточных данных (которые более нигде не используются - только внутри цикла). Кроме суммы и последующей записи результата ничего с переменной не делается. Так вот именно отсутствие i:=0 в начале процедуры и не нравится компилятору. Но код рабочий и с i:=0 и без него. Никаких if'ов в коде нет вообще. Поэтому мне и непонятно - что именно не понравилось компилятору в неинициализированной переменной. Код процедуры дословно я уже не помню - было где-то год назад.

Если вам нравится придираться к словам - удачи...


Anatoly Podgoretsky   (2008-03-14 17:11:00) [66]

Если будет использоваться в finally, то конечно может быть неинициализирована.


Семеныч   (2008-03-14 17:00:00) [67]

> Dimaxx ©   (14.03.08 16:22) [16]

Обратите внимание, что переменная, вроде бы, железно инициализируется - а оказывается, что нет. То же самое (или что-то типа этого) может быть и в Вашем примере [10], смотря что написано в многоточиях. Например:

var
  i, x, y: integer
begin
 try
   ...
   if (x = 0) or (y = 0) then
     raise ...;
   i := x + y;
 finally
   ... // Здесь переменная i может быть неинициализирована.
 end;
end;


Anatoly Podgoretsky   (2008-03-14 16:54:00) [68]


> орет, что i не инициализировано - ставишь i:=0 в начале
> и все отлично

Лапшу на уши не вешай.


Семеныч   (2008-03-14 16:51:00) [69]

> Dimaxx ©   (14.03.08 16:22) [16]

> в пропущенных командах не употребляются указанные переменные и тем
> более нет if'ов с i, на отсутствие инициализации которой и ругается
> компилятор.

А это и не обязательно. Связь может быть и не такой явной. Например:

var
 i: integer;
begin
 try
   i := MyFunction(...);
 except
   on E: Exception do
     ShowMessage(IntToStr(i)); // Здесь компилятор ругнется.
 end;
end;


clickmaker   (2008-03-14 16:35:00) [70]


> [19] Dimaxx ©   (14.03.08 16:32)

а в [10] разве не такой вид?


Dimaxx   (2008-03-14 16:32:00) [71]


> x:=4;
> y:=5;
> i:=x+y;

Именно в таком - ессно.


Johnmen   (2008-03-14 16:29:00) [72]


> Dimaxx ©   (14.03.08 16:22) [16]

Я уже сам забыл, что имел в виду :)
Ты просто попробуй [13] и прокомментируй результат...


clickmaker   (2008-03-14 16:28:00) [73]


>  [16] Dimaxx ©   (14.03.08 16:22)

в таком коде
x:=4;
y:=5;
i:=x+y;

максимум, что робко шепнет компилятор, это "value assigned to x(y,i) never used"
так что, не надо тут ля-ля


Dimaxx   (2008-03-14 16:22:00) [74]

Связь в том, что в пропущенных командах не употребляются указанные переменные и тем более нет if'ов с i, на отсутствие инициализации которой и ругается компилятор. Вроде я правильно понял вопрос. Если нет - растолкуй что ты имел в виду. :)


Johnmen   (2008-03-14 15:58:00) [75]


> Dimaxx ©   (14.03.08 15:44) [14]

Какая логическая(или другая) связь между
> if'ы замноготочил?
и
>В многоточиях не упоминается ни x, ни y, ни i.
?


Dimaxx   (2008-03-14 15:44:00) [76]


> Ты, наверное, и if'ы замноготочил?
> А потом удивляешься...:)

Я уже говорил, что


> В многоточиях не упоминается ни x, ни y, ни i. Поэтому они тут не причем.


Johnmen   (2008-03-14 15:28:00) [77]


> Dimaxx ©   (14.03.08 15:14) [10]
> Dimaxx ©   (14.03.08 15:21) [12]

Ты, наверное, и if'ы замноготочил?
А потом удивляешься...:)

PS
Для полного успокоения напиши
var i,x,y: integer
begin
x:=4;
y:=5;
i:=x+y;
if i=0 then;
end;

потом расскажи :)


Dimaxx   (2008-03-14 15:21:00) [78]

В многоточиях не упоминается ни x, ни y, ни i. Поэтому они тут не причем. Мне непонятен один момент: зачем орать, что переменная не инициализирована, если i:=x+y и так инициализация с присвоением результата (по большому счету мне по барабану значение, которое хранится в i до инициализации). Ну подумаешь она не в самом начале процедуры.


Плохиш   (2008-03-14 15:16:00) [79]


> var i,x,y: integer
> begin
>  ...
>  x:=4;
>  ...
>  y:=5;
>  ...
>  ...
>  i:=x+y;
>  ...
> end;
>
> орет, что i не инициализировано - ставишь i:=0 в начале
> и все отлично.

А свои многоточия проверить западло конечно, всё компилятор виноват...


Dimaxx   (2008-03-14 15:14:00) [80]


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

Я-то как раз понял о чем он, ибо часто сталкивался. А вот ты вроде не понял о чем я сказал.


> var i: Integer
> begin
>  i:=0;  //ни к чему hint от компилятора
>  I:=x+y;

В этом случае да, ибо присвоение 0 и тут же новое присвоение. А если

var i,x,y: integer
begin
 ...
 x:=4;
 ...
 y:=5;
 ...
 ...
 i:=x+y;
 ...
end;

орет, что i не инициализировано - ставишь i:=0 в начале и все отлично. Однажды даже столкнулся с такой тупостью, что переменная (не инициализированная) использовалась как временная для хранения промежуточного результата, далее выполнялись некие действия, а потом этот промежуточный рез-т заносился в поле record'а. И компилятор вякнул, что переменная объявлена, но нигде не используется... Видел такое только 1 раз - больше не попадалось. Даже не понял с какого перепугу он переменная не понравилась компилятору...


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

Наверх

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