Hint: The left operand of the IN operator sized

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6941
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Hint: The left operand of the IN operator sized

Beitrag von Mathias »

Wieso bekomme ich hier folgenden Hinweis ?

Code: Alles auswählen

Hint: The left operand of the IN operator should be byte sized
Bei der ersten in-Abfrage kann "i" auch grösser als 255 sein, da kommt aber keine Meldung.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
 
  procedure Test(i: integer);
  begin
    if i in [1..4] then begin
      ShowMessage('i ist in 1..4');
    end;
    if Pos('c', 'abcdef') in [1..4] then begin  // da kommt der Hinweis
      ShowMessage('c ist bei pos 1..4');
    end;
  end;
 
begin
  Test(2);
end; 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Hint: The left operand of the IN operator sized

Beitrag von theo »

Die Frage ist eher umgekehrt.
Wieso bekomme ich bei der ersten In-Abfrage keinen Hinweis.
Weiss ich auch nicht. Hat wohl mit dem Datentyp zu tun.
Wenn du den (Typ von i) auf den Rückgabetyp von Pos (SizeInt) setzt, bekommst du den ersehnten Hinweis.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
 
  procedure Test(i: SizeInt);
  begin
    if i in [1..4] then begin
      ShowMessage('i ist in 1..4');
    end;
    if Pos('c', 'abcdef') in [1..4] then begin  // da kommt der Hinweis
      ShowMessage('c ist bei pos 1..4');
    end;
  end;
 
begin
  Test(2);
end;   
Vielleicht weiss Marco warum (marcov).

Mathias
Beiträge: 6941
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Hint: The left operand of the IN operator sized

Beitrag von Mathias »

Code: Alles auswählen

if Byte(Pos('Ka ', s)) in [1..4] then begin  
Mit eine Typenumwandlung verschwindet der Hinweis, aber es mach nur den Code komplizierter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten