Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   FreePascal Try Except Problem (https://www.delphipraxis.net/183732-try-except-problem.html)

himitsu 1. Feb 2015 23:19

AW: Try Except Problem
 
Jupp, das hab ich bei einigen Codes auch schon gemacht.

Leider gibt es IfOpt nur für die alten einbuchstabigen "+/-"-Optionen. :cry:


Einfach so umschalten und danach "zurückschalten" ist einfach nur falsch, vorallem wenn man sich vorher nicht den aktuellen Zustand merkt und danach "wirklich" wiederherstellt.
Leider fehlt auch noch eine Push/Pop-, bzw. Save/Restore-Möglichkeit, für die Compilerschalter.

Sowas wäre ja toll,
Delphi-Quellcode:
{$PUSH Options}  // oder {$PUSH Option X}
{$X+}
machwas;
{$POP Options}
bzw.
Delphi-Quellcode:
{$SAVEOPT X}
{$X+}
machwas;
{$RESTOREOPT X}
aber die Realität sähe etwa so aus :wall:
Delphi-Quellcode:
{$IFOPT X+} {$DEFINE _SaveX} {$ELSE} {$UNDEF _SaveX} {$ENDIF}
{$X+}
machwas;
{$IFNDEF _SaveX} {$X-} {$ENDIF}
denn
Delphi-Quellcode:
{$X+}
machwas;
{$X-}
wäre halt sowas von total falsch, wenn das X vorher schon aktiviert war und es danach nicht mehr ist. :warn:

BUG 2. Feb 2015 01:19

AW: Try Except Problem
 
Zitat:

Zitat von himitsu (Beitrag 1288517)
aber die Realität sähe etwa so aus :wall:
[DELPHI]{$IFOPT X+} {$DEFINE _SaveX} {$ELSE} {$UNDEF _SaveX} {$ENDIF}

Oder eben:
Delphi-Quellcode:
{$I StoreOptions}
{$X+}
// Zeug
{$I LoadOptions}
Die Includes müsste man nur einmal schreiben :mrgreen:
Aber stimmt schon, ein richtiger eingebauter Optionsstack wäre natürlich besser.

jaenicke 2. Feb 2015 04:45

AW: Try Except Problem
 
Zitat:

Zitat von himitsu (Beitrag 1288510)
Wenn irgendein Idiot daran rumspielt, dann hat er Pech und muß mit den Konsequenzen leben.
Ich bin auch dafür, daß solche Optionen endlich mal aus den Projektoptionen raus fliegen oder es zumindestens mit mindestens 200 "Willst du das wirklich?"-Dialogen bestätigen muß.

Ich habe mittlerweile einige Projekte gesehen, bei denen das absichtlich als Standard gesetzt war.
Aber welche anderen Einstellungen bringen denn die Logik potentiell so durcheinander, dass es tragisch wäre, wenn die anders gesetzt sind als erwartet? Da fallen mir ehrlich gesagt auf Anhieb keine ein.

JamesTKirk 2. Feb 2015 06:33

AW: Try Except Problem
 
Zitat:

Zitat von himitsu (Beitrag 1288517)
Einfach so umschalten und danach "zurückschalten" ist einfach nur falsch, vorallem wenn man sich vorher nicht den aktuellen Zustand merkt und danach "wirklich" wiederherstellt.
Leider fehlt auch noch eine Push/Pop-, bzw. Save/Restore-Möglichkeit, für die Compilerschalter.

Dann ist ja gut, dass bei diesem Thread Free Pascal drüber steht. Da geht das nämlich:
Delphi-Quellcode:
{$PUSH}
{$X+}
machwas;
{$POP}
:mrgreen:

Gruß,
Sven

Dejan Vu 2. Feb 2015 06:44

AW: Try Except Problem
 
Zitat:

Zitat von jaenicke (Beitrag 1288521)
Aber welche anderen Einstellungen bringen denn die Logik potentiell so durcheinander, dass es tragisch wäre, wenn die anders gesetzt sind als erwartet? Da fallen mir ehrlich gesagt auf Anhieb keine ein.

Wenn Du vollständige Bool'sche Evaluation meinst:
Delphi-Quellcode:
if CalculateFunctionWithSideEffec1 or CalculateFunctionWithSideEffec2 then
Klar, wer ist so dämlich... aber es ging ja nur ums einfallen.

jaenicke 2. Feb 2015 07:58

AW: Try Except Problem
 
Zitat:

Zitat von Dejan Vu (Beitrag 1288525)
Wenn Du vollständige Bool'sche Evaluation meinst:

Nein, ich meinte andere Einstellungen als eben die vollständige boolsche Auswertung. Klar, wenn man z.B. RTTI Informationen ausklammert, gibt es auch potentiell Fehler, aber das ändert erst einmal nichts an der Programmlogik.

p80286 2. Feb 2015 11:11

AW: Try Except Problem
 
Zitat:

Zitat von himitsu (Beitrag 1288447)
Delphi-Quellcode:
try
  i := StrToInt('abc');
except
  i := 0;
end;

@nicht nur Himitsu
Wenn die 0 als Fehler definiert ist und alle Datensätze gelesenwerden müssen, egal ob gültig oder nicht, und die Anwendung nicht dialoglastig ist, dann ist so ein Konstrukt nicht ganz falsch.

Gruß
K-H

himitsu 2. Feb 2015 11:14

AW: Try Except Problem
 
Doch, ist es.

Versuch mal soeinen Code zu debuggen :freak: und außerdem sind Exceptions eher für Ausnahmen und nicht zur "normalen" Programmsteuerung gedacht.
Delphi-Referenz durchsuchenVal, Delphi-Referenz durchsuchenTryStrToInt, Delphi-Referenz durchsuchenStrToIntDef usw.

Sir Rufo 2. Feb 2015 14:26

AW: Try Except Problem
 
Zitat:

Zitat von p80286 (Beitrag 1288559)
Zitat:

Zitat von himitsu (Beitrag 1288447)
Delphi-Quellcode:
try
  i := StrToInt('abc');
except
  i := 0;
end;

@nicht nur Himitsu
Wenn die 0 als Fehler definiert ist und alle Datensätze gelesenwerden müssen, egal ob gültig oder nicht, und die Anwendung nicht dialoglastig ist, dann ist so ein Konstrukt nicht ganz falsch.

Gruß
K-H

Ja wenn die Welt so einfach wäre ... und niemand diese Funktion anders definieren könnte, dann ja, aber dem ist nicht so, da diese Funktion eben doch auf einmal aus einer anderen Unit kommt, dort fehlerhaft ist und eigentlich eine Exception wirft und ich diese Information nie bekomme, weil ich toll alle Exceptions wegfange.

Niemals eine Exception blind wegfangen, sondern eher an so vielen Stellen wie möglich sogar eine Exception werfen, wenn die übergebenen Informationen so nicht verarbeitbar sind. Nur so kann ich eine zuverlässige und robuste Anwendung erstellen mit möglichst wenigen Bugs.

mm1256 2. Feb 2015 15:59

AW: Try Except Problem
 
Zitat:

Zitat von Sir Rufo (Beitrag 1288608)
Niemals eine Exception blind wegfangen, sondern eher an so vielen Stellen wie möglich sogar eine Exception werfen, wenn die übergebenen Informationen so nicht verarbeitbar sind. Nur so kann ich eine zuverlässige und robuste Anwendung erstellen mit möglichst wenigen Bugs.

Wahre Worte und mir aus der Seele gesprochen :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 3 von 4     123 4      

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