Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kurioser Compiler-Hinweis - logisch nicht nachvollziehbar (https://www.delphipraxis.net/98520-kurioser-compiler-hinweis-logisch-nicht-nachvollziehbar.html)

triangulum 28. Aug 2007 16:23


Kurioser Compiler-Hinweis - logisch nicht nachvollziehbar
 
Salü,

Delphi-Quellcode:
if ((low(CurveArray) <= index) and (high(CurveArray) >= index)) then
Der compiler sagt für diese Zeile, "der Vergleich ergibt immer true".

Hmmmm....

Array mit 3 Elementen, dann ist low = 0, high = 2, und index = 6 z.B., dann ist der Ausdruck doch nicht true?!


Fehler vom Kompiler?

OregonGhost 28. Aug 2007 16:36

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Also, erstmal sagt der Compiler nicht "der Ausdruck ergibt immer true", sondern "der Vergleich ergibt immer true". Also ist einer der beiden Vergleiche gemeint. Ist index zufällig unsigned und low kann nicht kleiner als 0 sein (z.B. dynamisches Array)?
0 <= unsigned value ist immer true.

triangulum 28. Aug 2007 17:10

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
index ist vom Typ Word und damit in der Tat unsigned.

Dynamisches Array isses auch, also low dann nicht kleiner als 0.

Der Vergleich ist nun dann immer true, wenn low auch nicht größer als 0 sein kann ...

sonst z.B. low =2 und index = 1 ergäbe false

Vermute daher low kann auch nicht größer als 0 sein ....

Apollonius 28. Aug 2007 17:14

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Für dynamische Arrays ist low immer null.

inherited 28. Aug 2007 17:30

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Änder doch mal testweise dein Array in ein statisches mit dem bereich 1 bis irgendwas und compiliere nochmal

negaH 28. Aug 2007 17:32

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Low(Array) gibt dir den 0-basierten Index des 1. Elements zurück.

Was gibt Low() zurück wenn das Array keine Elemente hat, also nil ist ?
Was wird High() zurückgeben in diesem Fall ?

Schon mal in die Hilfe unter Low() und High() geschaut ?

Gruß Hagen

Muetze1 28. Aug 2007 18:39

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Zitat:

Zitat von negaH
Low(Array) gibt dir den 0-basierten Index des 1. Elements zurück.

Ausser bei statischen Arrays welche nicht bei 0 als kleinsten Index definiert wurden. (Array[15..20] -> Low() = 15).

Zitat:

Zitat von negaH
Was gibt Low() zurück wenn das Array keine Elemente hat, also nil ist ?

Immernoch 0 (immernoch bezogen auf dynamische Arrays)

Zitat:

Zitat von negaH
Was wird High() zurückgeben in diesem Fall ?

-1

Dax 28. Aug 2007 18:42

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Zitat:

Zitat von Muetze1
(Array[15..20] -> Low() = 15)

Nur ein Beispiel für Hagens Aussage.

Muetze1 28. Aug 2007 18:45

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Naja, dann sorry, aber "0-basierten Index" hat für mich vom Verständnis soviel bedeutet wie: Immer 0 und dann weiter...

Ergo: erstes Element immer "0" und alle weiteren dann aufsteigend. Seine Aussage stellte sich in meinen AussagenAugen genau anders dar als du es mir nun erklärst.

Aber nun gut, dann nehm ich alles zurück und behaupte das Gegenteil.

Dax 28. Aug 2007 18:48

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba
 
Ich lese "0-basierter Index des ersten Elements" als "Index, des ersten Elements, wenn man das Array in ein neues, 0-indiziertes Array kopierte und von dort aus das erste Element des alten Arrays suchte"...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz