case ohne const

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

case ohne const

Beitrag von Mathias »

Folgendes Beispiel verursacht folgenden Fehler:

Code: Alles auswählen

unit1.pas(42,6) Error: Constant Expression expected

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  a: byte = 0;
  b: byte = 1;
  c: byte = 2;

  w: byte;
begin
  w := b;
  case w of
    a: begin
      WriteLn(a);
    end;
    b: begin
      WriteLn(b);
    end;
    c: begin
      WriteLn(c);
    end;
  end;
end;
Kann man FPC irgendwie mit einem Compiler-Schalter überreden, das dies geht ?
Ansonsten muss man eine recht unübersichtliches if then Gewurstel machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: case ohne const

Beitrag von six1 »

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  a: byte = 0;
  b: byte = 1;
  c: byte = 2;

  w: byte;
begin
  w := b;
  //case w of
  //  a: begin
  //    WriteLn(a);
  //  end;
  //  b: begin
  //    WriteLn(b);
  //  end;
  //  c: begin
  //    WriteLn(c);
  //  end;
  //end;

  if w in [a] then
  begin
      WriteLn(a);
  end else
  if w in [b] then
  begin
      WriteLn(b);
  end else
  if w in [c] then
  begin
      WriteLn(c);
  end else
  begin
    WriteLn('Nothing');
  end;

end;
Gruß, Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: case ohne const

Beitrag von fliegermichl »

In der FreePascal Dokumentation steht das u.a. explizit
They have to be constant expressions, i.e. known at compile-time.

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

Re: case ohne const

Beitrag von Mathias »

Danke
Dann muss ich es wohl oder übel mit if then machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: case ohne const

Beitrag von Winni »

Hi!

Nö, Du kannst a,b und c ja als const deklarieren.
Dann gehts.

Winni

Antworten