Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konstantenausdruck verletzt untere Grenze (https://www.delphipraxis.net/215786-konstantenausdruck-verletzt-untere-grenze.html)

TomyN 6. Sep 2024 21:23

Delphi-Version: 12 Athens

Konstantenausdruck verletzt untere Grenze
 
Code:
 
var validSetup: boolean;
    samplesPerSecond: Integer;

.....

validSetup := (samplesPerSecond in [48000, 96000]);

Fehlermeldung des Compilers: Konstantenausdruck verletzt untere Grenze ??????

himitsu 6. Sep 2024 21:45

AW: Konstantenausdruck verletzt untere Grenze
 
Der Fehler ist eigentlich, dass in Wirklichkeit die obere Grenze verletzt wird. :lol:

Nja, leider ist das, was du da hast kein Array, sondern ein SET und das geht nur von 0 bis 255.
Mir wäre auch lieber, wenn der Compiler so schlau wäre und in diesem Fall ein Array daraus machen würde.

PS: Das ist auch der Grund, warum Emba mal dieses grauenhaft perverse Delphi-Referenz durchsuchenCharInSet erfand, denn
Delphi-Quellcode:
C in ['a', 'z']
ist ebenfalls ein SET und da passt nunmal Unicode/WideChar nicht rein.
Besonders perfide ist aber, dass CharInSet ebenfalls intern das SELBE macht und es somit absolut keinen Mehrwert erbringt, außer dass keine Compilerwarnung angezeigt wird. (die man aber alternativ auch einfach deaktivieren kann).



Und wenn man wirklich ein Array daraus machen würde, dann bemerkst du, dass es leider keinen "Standard-Operator" IN für Integer+Array gibt.
Delphi-Quellcode:
function ArrayOf(Values: array of Integer): TArray<Integer>;
begin
  ...
end;

validSetup := (samplesPerSecond in ArrayOf([48, 96]));
Leider gibt es in Delphi (SysUtils, Math, ...) auch keine fertige Funktion dafür,
so wie z.B. aus den StrUtils das
Delphi-Quellcode:
B := MatchStr(S, ['a', 'bb']);
.

OK, gibt es doch, aber ob man
Delphi-Quellcode:
B := TArray.Contains<Integer>([123, 456], s);
wirklich als schöne Lösung ansehn will?
Zu beachten ist auch, dass bei dieser TArray-Klasse einige/viele Methoden ausschließlich mit sortieren Arrays funktionieren.

TomyN 7. Sep 2024 06:32

AW: Konstantenausdruck verletzt untere Grenze
 
Danke für die Erläuterung. In ist sozusagen für die Katz und für Mausclicks und Font.Style.
Code:
validSamplerate = CharInSet( Char(samplerate), Char(48000), Char(96000))
:-)

Redeemer 8. Sep 2024 12:22

AW: Konstantenausdruck verletzt untere Grenze
 
Keine Ahnung, was CharInSet bei dir ist, aber ich gehe mal ganz stark davon aus, dass das immer zu False evaluiert, denn Char(SampleRate) ist nie zwischen #48000 und #30464, weil das dritte Argument kleiner als das zweite ist.
Nicht willkürlich konvertieren, nur weil es geht. Es muss auch Sinn ergeben.

Korrekt wäre Delphi-Referenz durchsuchenMath.InRange.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz