Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.014 c
2-1125050572
oradb
2005-08-26 14:02
2005.10.09
Привязать объект к item-у listbox


9-1117701409
Novichok
2005-06-02 12:36
2005.10.09
Помогите новичку ссылкой или хорошим исходником!


2-1125162227
LamerZ
2005-08-27 21:03
2005.10.09
Как програмно свернуть окно?


2-1124950087
magnus
2005-08-25 10:08
2005.10.09
опции проекта


1-1126777483
JTAG
2005-09-15 13:44
2005.10.09
Ув. коллеги подкажите плз как сделать чтобы у исполняемого файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский