AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

Ein Thema von Delphi-Laie · begonnen am 29. Aug 2013 · letzter Beitrag vom 30. Aug 2013
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 14:22
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 15:00
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.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#3

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 15:24
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 15:45
Hängt wohl von der Compilerversion ab. Bei mir in D2007 läuft z.B. das, in XE3 wohl nicht mehr?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 16:05
DocWiki:
Zitat:
Eine andere Lösung wäre, den betreffenden Ausdruck aus dem Quelltext zu entfernen.
Tolle Lösung. Ich glaube so gehe ich jetzt alle meine Probleme an...
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 29. Aug 2013, 20:06
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.
Hallo Uwe Raabe, Deine Antwort trifft es wohl am ehesten.

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.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#7

AW: Merkwürdiges Verhalten bei einer Delphi-eigenen Funktion und erweiterter Syntax

  Alt 30. Aug 2013, 08:06
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 if nil=addr(sin) then ; von D2-D7 nicht kompiliert, ab D9 schon. Das komplett analoge Konstrukt if nil=addr(sinh) then ; wird von allen übersetzt.
  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 23:21 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