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

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

Value assigned to


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

Gluka ©   (2002-03-14 02:18:00) 

Что это за фигня, и как с этим бороться!!!


keg   (2002-03-19 10:16:00) [41]

в показаном примере компилятор правильно предупреждает. В первой строке ты присваиваешь ему False и далее (в пропущенной строке) опять делаешь присваивание, а между ними Flag не используется, значит первое присваивание не нужно - его можно вырезать. Ну и в самом конце, в Exception опять делаешь присваивание, а после (до конца процедуры) Flag не используется, стало быть - какая разница, какое значение будет иметь Flag после выхода из цикла?


Song   (2002-03-19 09:55:00) [42]

2ao1973 (19.03.02 09:49)
Какой у Вас вопрос? Почему сразу в обидки?


ao1973   (2002-03-19 09:49:00) [43]

Удалено модератором


Song   (2002-03-19 08:59:00) [44]

2Внук © (18.03.02 17:55)
А у меня выводит :(( Я ж говорю, компилятор запутался...
Нет, вместо ... там ничего такого нет.
Кстати отрывок выкусил из программы некорректно.
Строка Flag:=False;стоит перед Repeat, т.е.:
.....

For t:=1 to RowCount-1 Do
Begin
Node:=TreeView.Items[0];
Flag:=False;
Repeat
try
IF Pos(Cells[Ind

...

Но это ничего не меняет. Предупреждение по прежнему не должно выдаваться.


Внук   (2002-03-18 17:55:00) [45]

>>Song ©
Торможу, однако. Нельзя Flag выкидывать, от него зависит обработка Exception. Только вот хотите верьте, хотите - нет, но этот код у меня (Delphi5) не выдал на переменную Flag никаких предупреждений. Может быть, дело в том, что стоит вместо ... ?


Внук   (2002-03-18 17:20:00) [46]

>>Song ©
А Вы считаете, что используется? Если код действительно таков, как здесь, можете смело выкидывать эту переменную Flag. Выход из цикла возможен только по Exception, где Flag будет всегда true. В теле цикла значение Flag не используется. Или я чего-то не понял?


Song   (2002-03-16 11:09:00) [47]

2Anatoly Podgoretsky © (14.03.02 22:53)
Извиняюсь, что раньше не смог, только приехал.
Пожалуйста, выдаёт что переменная Flag никогда не используется:


Flag:=False;
With Strg Do
With TreeView.Items Do
For t:=1 to RowCount-1 Do
Begin
Node:=TreeView.Items[0];
Repeat
try
IF Pos(Cells[IndexNo,t],Node.Text)>0 then
IF Pos("ingoing",S)>0 then
Begin
.....
Flag:=True;
End Else
Begin

......
Flag:=True;
End;

IF Node.Text="Другие документы" then NodeSafe:=Node;
Node:=Node.GetNextSibling;

except
IF not Flag then
Begin
.....
Flag:=True;
End;
Break;
end;
Until False;
End;


Anatoly Podgoretsky   (2002-03-15 21:47:00) [48]

Sergey13 © (15.03.02 10:52)
Говорили же прислушайся к компилятору, первое значение не используется НИКОГДА

Внук © (15.03.02 10:53)
Ну тут две проблемы.
1. компилятор одно проходный, он не может знать что переменная модет быть использован в другой процедуре, а может быть и нет, например по рпичине исключения.

2. переменная ААА может быть неинициализирована.

То есть оба примера неудовлетворительные.


Sergey13   (2002-03-15 11:17:00) [49]

>Внук © (15.03.02 11:00)
Да ты прав, спасибо. Что то я это дело прошляпил, и покатил бочку на Делфу. Каюсь.


Внук   (2002-03-15 11:09:00) [50]

Да, к коду в сообщении Внук © (15.03.02 10:53) нужно добавить что-то вроде
procedure Form1.OnCreate ...
begin
First;
Second;
end;


Внук   (2002-03-15 11:00:00) [51]

>>Sergey13 ©
Так ведь и правильно. Присвоение vch:=1; в самом начале бессмысленно, так как потом эта переменная в ЛЮБОМ случае переприсваивается.
"При повторной компиляции исчезло." :)) А если сделать Build All - появится снова.


Внук   (2002-03-15 10:53:00) [52]

>>Shirson ©
Я имел в виду немного другое, то есть действительно "лишние" предупреждения. Например, условный оператор, где переменная инициализируется только в одной ветке, а выполнению другой ветки невозможно по логике программы (пока недописанной). Вот так:

...
var i:byte;
...

procedure First;
begin
i:=1;
...
end;

procedure Second;
var ААА:integer;
begin
if i=1 then
begin
AAA:=1;
...
end
else
begin
...
end;
ShowMessage(IntToStr(AAA));
end;

Код набирал прямо здесь, но, думаю, смысл понятен


Sergey13   (2002-03-15 10:52:00) [53]

Опять полез в Делфу и получилось

procedure TForm12.FormShow(Sender: TObject);
var i,k,ls, vch,vcho:integer;
....
бла-бла-бла
....
vch:=1;
vcho:=1;
for i:=1 to ls do
begin
c:=copy(s,i,1);
if pos(c,"0123456789.,")>0 then st:=st+c
else
begin
if c="(" then vch:=1 else
if c="*" then vch:=2 else
if c="/" then vch:=3 else vch:=0;
if vch=1 then k:=k+1;
.....
бла-бла-бла
.....
Выдало - Value assigned to "vch" never used
При повторной компиляции исчезло.


MAxiMum   (2002-03-15 10:16:00) [54]

Беда-то ещё в том, что компилятор ещё и выкинет строки кода с неиспользованной переменной (посмотрите на левую часть редактора с точками).
КОДА! КОДА! КОДА! КОДА! КОДА! КОДА! КОДА! КОДА! КОДА! КОДА! КОДА!


Shirson   (2002-03-15 10:10:00) [55]

>Внук © (15.03.02 09:27)
А мне бы тоже хотелось увидеть пример кода. Компилятор действительно иногда выводит "лишние" предупреждения, но не этого типа (насчет неинициализированной переменной бывает).
---

Есть такое. Это когда объявляешь переменную и используешь её значение без предварительной инициализации. Что называется на свой страх и риск - компилятор за последствия ответственности не несет ;)


Sergey13   (2002-03-15 09:52:00) [56]

У меня тоже так бывало. Ругалось на неиспользование, при явном использовании переменной. Но как то эпизодически (то есть, то нет, и не каждый день) и "лечилось" повторной компиляцией. Вот так просто. Скомпилил раз - получил, скомпилил второй - пропало. Может с первого раза не понимал 8-) А отключать варнинги не стОит - иногда дело говорит.


Внук   (2002-03-15 09:27:00) [57]

А мне бы тоже хотелось увидеть пример кода. Компилятор действительно иногда выводит "лишние" предупреждения, но не этого типа (насчет неинициализированной переменной бывает). Предупреждение на использование переменной достаточно легко проверить - компилятор всего лишь ищет обращения к данному участку памяти на чтение - оно либо есть, либо нет. По крайней мере, в моей практике (и моих коллег) случая ошибочного вывода именно этого предупреждения не было.


Shirson   (2002-03-15 07:54:00) [58]

Компилятор прав.
a:=0; это не использование переменной. Использование переменной это c:=b+a; Или for a:=0 to 100 do...
Попробуй выкинуть из свой процедуры декларацию этой переменной, убери из тела a:=0 и запусти программу. Что-нибудь неработает? :)


Anatoly Podgoretsky   (2002-03-14 23:25:00) [59]

Не ну так головословно, обычно есть логика в действиях компилятора или ты его запутал :-)


Malder   (2002-03-14 23:12:00) [60]

Anatoly Podgoretsky, компилятор действительно ошибается. И действительно трудно привести пример. У меня это было с каким-то компонентом. Он всегда писал S1 not used. Хотя S1 еще как юзалась...


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

Наверх

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