AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Konstantenausdruck verletzt untere Grenze
Thema durchsuchen
Ansicht
Themen-Optionen

Konstantenausdruck verletzt untere Grenze

Ein Thema von TomyN · begonnen am 6. Sep 2024 · letzter Beitrag vom 8. Sep 2024
Antwort Antwort
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
244 Beiträge
 
Delphi 10.3 Rio
 
#1

Konstantenausdruck verletzt untere Grenze

  Alt 6. Sep 2024, 22:23
Delphi-Version: 12 Athens
Code:
 
var validSetup: boolean;
    samplesPerSecond: Integer;

.....

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

Fehlermeldung des Compilers: Konstantenausdruck verletzt untere Grenze ??????
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: Konstantenausdruck verletzt untere Grenze

  Alt 6. Sep 2024, 22:45
Der Fehler ist eigentlich, dass in Wirklichkeit die obere Grenze verletzt wird.

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 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 B := MatchStr(S, ['a', 'bb']); .

OK, gibt es doch, aber ob man 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Sep 2024 um 23:21 Uhr)
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
244 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Konstantenausdruck verletzt untere Grenze

  Alt 7. Sep 2024, 07:32
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))
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Konstantenausdruck verletzt untere Grenze

  Alt 8. Sep 2024, 13:22
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz