Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Warn Meldung Vorzeichenbehaftet und lose Typen


abi - Di 25.05.04 11:18
Titel: Warn Meldung Vorzeichenbehaftet und lose Typen
Hallo alle zusammen

ich habe hier im Forum mal eine Warte schleife gefunden. Sie funktioniert macht überhaupt keine Probleme aber ich bekomme immer eine Warnmeldung jetzt weiss ich nicht ob des irgendwann mal Probleme gibt oder egal ist. :nixweiss:


Die Warnung :hair:
Vorzeichenbehaftete und lose Typen werden Kombiniert -beide Operanden werden erweitert.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Wait(time: word; bstop1: Boolean);
var
  start: integer;
begin
  start := GetTickCount;
  while GetTickcount-start <= time do begin
    Application.ProcessMessages;
    if bstop = True then begin
    //ShowMessage('wait bstop true');
    exit;
    end;
  end;
end;


Ciao

Abi

Moderiert von user profile iconPeter Lustig (11:51, 25.05.2004): Code- durch Delphi-Tags ersetzt


Delete - Di 25.05.04 11:24


Delphi-Quelltext
1:
while GetTickcount-start <= time                    

GetTickCount ist ein DWORD, da du start ein Integer davon abziehst, erweitert der Compiler den Datentyp zu einem Integer. So weit so gut. Jetzt vergleichst du das aber mit einem Word und das ist vorzeichenlos. Deswegen die Meldung. Deklarier alles als vorzeichenlos und es sollte klappen.


Udontknow - Di 25.05.04 11:35

GetTickcount liefert ein DWord zurück, also ein LongWord (32Bit ohne Vorzeichen), nicht ein Longinteger (was dasselbe wie Integer wäre).

Cu,
Udontknow


abi - Di 25.05.04 11:37

Hallo Lucki
erst mal danke, jetzt bin ich mir nur nicht sicher ob ich dich richtig verstanden habe. :roll:

Ich habe jetzt start zu einer Word Variablen gemacht.
Dann ist zwar die Warnung weg aber dafür geht die schleife nicht mehr. :autsch:

Und GetTickCount hab ich nirgends zugeordnet. :crying:

Tja was soll ich dazu sagen. :nixweiss:

MMMM, kannst du mir nochmal helfen. :D

abi


Udontknow - Di 25.05.04 11:38

Es kommt sehr wahrscheinlich zu einem Überlauf. Mach Start zu einem DWord bzw. zu einem Longword.

Cu,
Udontknow


abi - Di 25.05.04 11:39

wenn GetTickCound ein Integer liefert, dann würde des ja erklären warum des net mehr. Geht

Muss ich mein time in ein Integer Variable ändern.


Udontknow - Di 25.05.04 11:41

Wie ich bereits sagte, liefert GetTickCount Longword (Wertebereich 0..4294967295) zurück, und nicht ein Integer (-2147483648..2147483647).

Cu,
Udontknow


abi - Di 25.05.04 11:42

ok, es geht. :dance: :dance2: :dance:

Vielen dank nochmal. Hab jetzt start zu einem DWord gemacht.

mercy :beer:


Delete - Di 25.05.04 11:46

Udontknow hat folgendes geschrieben:
GetTickcount liefert ein DWord zurück, also ein LongWord (32Bit ohne Vorzeichen), nicht ein Longinteger (was dasselbe wie Integer wäre).

Cu,
Udontknow

Danke, habe mich vertan. Ich bessere es aus.