Delphi-Version: 5
Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Hallo Delphifreunde!
Beim Versuch, jemandem zu demonstrieren, daß nicht alle Fehler vom Delphi-Compiler (Version 4) gefunden werden, kam ich auf die Idee, einfach sqrt(-1) in einen Quelltext einzufügen - die erweiterte Syntax ist eingeschaltet. Doch es kam bei der Syntaxprüfung die Fehlermeldung "Anweisung erforderlich, aber Ausdruck vom Typ 'Real" gefunden." Merkwürdig, das ist doch eine Funktion, die bei der erweiterten Syntax ihr Ergebnis nirdgendwohin weitergeben muß?! Unter "Deklaration suchen" kam ich - wenig überraschend - in die Unit System (diese Quelle steht auch in der Hilfe), dort gibt es aber die Zeichenkette "sqrt" nicht. Vermutlich wurde eine ander Quelltextunit beigelegt, als die zur Compilierung verwendet wurde, oder sqrt ist "noch tiefer" im System verankert (nämlich im Compiler) als in der Unit "System" abgelegt worden zu sein, und "Deklaration" verweist dann einfach - fälschlicherweise - zur Unit "System". Es kommt noch merkwürdiger: Über "System." Code Insight aufgerufen, und dort findet sich tatsächlich doch "procedure sqrt" (ohne weiteren Parameter). Also, als Prozedur müßte es nicht nur keinen Funktionswert haben, sondern überhaupt keinen zurückliefern imstande sein, kann sqrt, wenn man es benutzt, aber natürlich doch, denn es ist ja eine Funktion. So ist das mit dem Vorführeffekt, der kann sogar auch nach einem Vierteljahrhundert Freizeitprogrammiererei bei einer solch simplen Angelegenheit zuschlagen. Weiß jemand eine Erklärung? Ist die erweiterte Syntax nur bei selbstgeschriebenen Funktionen möglich? Danke im voraus für Euer Interesse und ggf. auch für die Antwort(en)! Gruß Delphi-Laie |
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Evtl. liegt es einfach nur daran, dass man das Projekt nach Änderung der Compiler-Optionen neu erzeugen muss (Shift+F9) und nicht nur neu compilieren.
|
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Es könnte auch einfach an dem veralteten Delphi 5 liegen, bei dem das sqrt direkt vom Compiler aufgelöst wird. In neueren Delphi-Versionen ist das je nach Zielplattform zwar unterschiedlich, aber als echte Assembler-Funktion in System.pas implementiert und da funktioniert die erweiterte Syntax auch.
|
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Hängt wohl von der Compilerversion ab. Bei mir in D2007 läuft z.B. das, in XE3 wohl nicht mehr?
|
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
DocWiki:
Zitat:
|
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Zitat:
Delphi 7 zeigt exakt das gleiche Verhalten. Turbo-Delphi hingegen compiliert es (m.E. das einzig korrekte Verhalten unter der sog. "erweiterten Syntax"), und bei "Deklaration suchen" wird auf eine gleichnamige (Assembler-)Funktion in der Unit System verwiesen (die wird dann tatsächlich gefunden). Auch wird, wie schon gesagt, "sqrt(-1)" als alleiniger Befehl ohne jede Wertzuweisung vom Compiler widerstandslos akzeptiert (der negative Radikant ist ja offensichtlich, aber alles kann man eben nicht berücksichtigen, soll die Compilierung nicht zu langsam werden), und beim Programmablauf kommt natürlich eine Exzeption. |
AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Ich stimme mit Uwe überein. Das ist übrigens nicht das einzige Mal, daß Compiler-Magic-'Funktionen' speziell behandelt werden, weil's halt keine richtigen Funktionen sind, zB wird
Delphi-Quellcode:
von D2-D7 nicht kompiliert, ab D9 schon. Das komplett analoge Konstrukt
if nil=addr(sin) then ;
Delphi-Quellcode:
wird von allen übersetzt.
if nil=addr(sinh) then ;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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