Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Hint-ы и Warning-и   Найти похожие ветки 

 
GanibalLector ©   (2005-09-14 20:38) [0]

Имеем следующие структуры(упрощ.вид):

type
 TClass1 = record
   a1:Byte;
   a2:Word;
 end;
 PClass1 = ^TClass1;

type
 TClass2 = record
   a1:Byte;
   a2:Word;
 end;
 PClass2 = ^ TClass2;

Пускай также будет след.ф-ция :

function GetClass1(Value:PClass1):Byte;
begin
 Value.a1:=$01;
 Value.a2:=$0102;
 Result:=0;
end;

с которой работаю следующим образом :
var a:PClass1;
begin
 GetMem(a,SizeOf(TClass2));
 GetClass1(a);
 Memo1.Lines.Add(IntToHex(a.a1,2)+"_"+IntToHex(a.a2,4));
 FreeMem(a);
end;


Так вот,таких ф-ций у меня много и они весьма однотипны.Все закончилось тем,что я начал путаться в собственном коде :(

Придумал следующее :

function GetValue(Mode:Byte;Value:Pointer):Byte;
 var a:PClass1;
     b:PClass2;
begin
 case Mode of
 0:begin
     a.a1:=$ee; // Warning:Variable "a" might not have been initialized
     a.a2:=$eedd;
     Value:=a; // Hint:Value assigned to "Value" never used
   end;
 1:begin
     b.a1:=$cc; // Warning:Variable "b" might not have been initialized
     b.a2:=$ff55;
     Value:=b; // Hint:Value assigned to "Value" never used
   end;
 end;
 Result:=0;
end;

работаю так :

var a:PClass1;
    b:PClass2;
    I:Integer;
begin
 I:=0; // Set 0 or 1
 case I of
 0:begin
     GetMem(a,SizeOf(TClass1));
     GetValue(I,a);
     Memo1.Lines.Add(IntToHex(a.a1,2)+"_"+IntToHex(a.a2,4));
     FreeMem(a);
   end;
 1:begin
     GetMem(b,Sizeof(TClass2));
     GetValue(I,b);
     Memo1.Lines.Add(IntToHex(b.a1,2)+"_"+IntToHex(b.a2,4));
     FreeMem(b);
   end;
 end;
end;


В результате получаю Hint-ы и Warning-и. Как побороть??? Да и вообще,правильный ли подход? Может можно еще короче сделать сабж?


 
OldNaum ©   (2005-09-14 20:54) [1]

а смысл использовать functions и возвращать везде 0? ну это так, к слову.

warnings я так понимаю из-за case (в одном случае A не инициализируется, в другом B), hints из-за того что value "реально" нигде не используется ))

подход, имхо, странный. даже немного жутковатый )


 
DesWind ©   (2005-09-14 20:59) [2]


> Так вот,таких ф-ций у меня много и они весьма однотипны.
> Все закончилось тем,что я начал путаться в собственном коде
> :(


Мож надо попробовать использовать TObject не record


 
DesWind ©   (2005-09-14 21:01) [3]


> В результате получаю Hint-ы и Warning-и. Как побороть???
>  Да и вообще,правильный ли подход? Может можно еще короче
> сделать сабж?

И првда, как-то корявенько выглядит...


 
GanibalLector ©   (2005-09-14 21:02) [4]

>а смысл использовать functions и возвращать везде 0?
Ну,если хочешь я могу выдать полный код этой ф-ции.Эдак... на пару листов.


 
OldNaum ©   (2005-09-14 21:02) [5]

может обрисуешь в кратце задачу? вдруг мысля появится у кого.


 
OldNaum ©   (2005-09-14 21:04) [6]

GanibalLector ©   (14.09.05 21:02) [4]
на пару листов не надо =) просто обычно в таких ситуациях показывают, к примеру, строкой "..." что там еще кода та море ) я ж не телепат. прошу прощение, если чем обидел.


 
kami ©   (2005-09-14 21:07) [7]

OldNaum ©   (14.09.05 20:54) [1]
>даже немного жутковатый

Даже не немного :)
По порядку :

> Warning:Variable "a" might not have been initialized

Естественно, она только была объявлена в var ф-и, память под нее не выделена, правильно компилятор ругается.
можно так :
procedure GetValue(Mode:Byte;var Value:Pointer);
begin
case Mode of
0:begin
    PClass1(Value)^.a1:=$ee;
    PClass1(Value)^.a2:=$eedd;
  end;
1:begin
    PClass1(Value)^.a1:=$cc;
    PClass1(Value)^.a2:=$ff55;
  end;
end;
end;


 
GanibalLector ©   (2005-09-14 21:08) [8]

2 OldNaum  (14.09.05 21:04) [6]
Хорош трепаться.Для этого соответствующие ветки форума есть.

2 OldNaum ©   (14.09.05 21:02) [5]
А что еще рисовать??? ИМХО в [0] и так все "разрисовано" дальше некуда.


 
kami ©   (2005-09-14 21:08) [9]

Упс ... Заменить :
1:begin
   PClass1(Value)^.a1:=$cc;
   PClass1(Value)^.a2:=$ff55;

на
1:begin
   PClass2(Value)^.a1:=$cc;
   PClass2(Value)^.a2:=$ff55;


 
GanibalLector ©   (2005-09-14 21:12) [10]

2 kami ©   (14.09.05 21:07) [7]
Спасибо,помогло.

Ну,а на счет подхода???


 
kami ©   (2005-09-14 21:26) [11]

Даже и не знаю...
Может, действительно стоит подумать насчет собственного класса ?
Сделать общего предка с абстрактным методом типа GetValue(и другими необходимыми), а в наследниках - перекрывать его собственными, со своими вычислениями в каждом ?
Если нет такой возможности или желания, кажется, непомешало бы пересмотреть саму GetValue - может, можно ее как-то структурировать, разбить на подзадачи ? Потому что 2 листа -), действительно можно запутаться.


 
DesWind ©   (2005-09-14 21:51) [12]


> GanibalLector ©   (14.09.05 21:02) [4]


В этом и есть как мне кажется твоя основная проблема. Надо конкретно ставить задачу. А так телепатировать особо не хочется.


> kami ©   (14.09.05 21:07) [7]

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


 
DesWind ©   (2005-09-14 21:58) [13]

и еще один бесплатный совет, если много однотипного надо обобщать.

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


 
kami ©   (2005-09-14 22:08) [14]

DesWind ©   (14.09.05 21:51) [12]
> если к примеру будет 2.

Неправда Ваша (с) :)
Предупреждение компилятор выдает потому, что a и b являются указателями,
и на момент обращения к их полям (for example, a.a1) под них не выделена память, что приведет к ошибке при обращении.
А если mode=2, то (в данном примере) не будет выполнено никаких действий, так что определены переменные или нет - не будет иметь совершенно никакого значения.


 
DesWind ©   (2005-09-14 22:12) [15]


> kami ©   (14.09.05 22:08) [14]


Ага, согласен.



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.032 c
1-1126875099
webpauk
2005-09-16 16:51
2005.10.09
Определение property


14-1127134185
oldman
2005-09-19 16:49
2005.10.09
Блин, проблема :(


2-1124826479
Агат
2005-08-23 23:47
2005.10.09
Работа с текстовым файлом


8-1114110608
clampo
2005-04-21 23:10
2005.10.09
Плейлист


14-1126841752
MBo
2005-09-16 07:35
2005.10.09
Пятничные задачки. Разомнем извилины.