AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Kurioser Compiler-Hinweis - logisch nicht nachvollziehbar
Thema durchsuchen
Ansicht
Themen-Optionen

Kurioser Compiler-Hinweis - logisch nicht nachvollziehbar

Ein Thema von triangulum · begonnen am 28. Aug 2007 · letzter Beitrag vom 29. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
triangulum

Registriert seit: 21. Jul 2006
39 Beiträge
 
Delphi 7 Professional
 
#1

Kurioser Compiler-Hinweis - logisch nicht nachvollziehbar

  Alt 28. Aug 2007, 15:23
Salü,

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?
Multa narrare possum, sed longum est ....
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#2

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 15:36
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
triangulum

Registriert seit: 21. Jul 2006
39 Beiträge
 
Delphi 7 Professional
 
#3

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 16:10
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 ....
Multa narrare possum, sed longum est ....
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 16:14
Für dynamische Arrays ist low immer null.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 16:30
Änder doch mal testweise dein Array in ein statisches mit dem bereich 1 bis irgendwas und compiliere nochmal
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 16:32
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 17:39
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 von negaH:
Was gibt Low() zurück wenn das Array keine Elemente hat, also nil ist ?
Immernoch 0 (immernoch bezogen auf dynamische Arrays)

Zitat von negaH:
Was wird High() zurückgeben in diesem Fall ?
-1
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 17:42
Zitat von Muetze1:
(Array[15..20] -> Low() = 15)
Nur ein Beispiel für Hagens Aussage.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 17:45
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.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#10

Re: Kurioser Compiler-Hinweis - logisch nicht nachvollziehba

  Alt 28. Aug 2007, 17:48
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"...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:24 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