Exceptions oder If
-
Auch unter MSVC wirft eine "Integer Divide by Zero" keine C++-Exception, sondern eine C-Exception.
Aber es gibt noch etwas viel Lustigeres: versucht mal eine "Float Divide by Zero" zu fangen#include "stdafx.h" #include <iostream> int main() { try { float zaehler, nenner, result; zaehler=1.0; nenner=0.0; result=zaehler/nenner; } catch(...) { std::cout << "error"; //denkste, nix mit error ;-)) } return 0; }
Viel Spaß
[ Dieser Beitrag wurde am 02.04.2003 um 22:50 Uhr von CodeWalker editiert. ]
-
Original erstellt von kartoffelsack:
Mit objektorientierung haben exceptions nix zu tun (außer vielleicht, dass man ein Objekt wirft). Das ganze fällt meines Erachtens eher in den Bereich aspektorientierte Programmierung (korrigiert mich, wenn ich Müll verzapfe).also ich finde exceptions sind mehr oop als globale error codes und getlasterror funktionen
-
Und ich finde, das eine hat mit dem anderen nix zu tun.
Man kann sicherlich auch ein Exception System in einer nicht OO Sprache aufbauen, z.b. in C. Gut, man kann dann halt nicht so tolle Sachen, wie in C++ werfen, aber es ist auf jedenfall unabhängig von Objektorientierung.
Exceptions sind ein eigenes Kapitel, ein eigenes Buch.
Man kann auch prima mit Error Codes in OO-Programmen arbeiten, und auch prima
Singletons verwenden, die den letzten error Code beinhalten. Also gibt es wohl auch Error Codes im OO Style.
Ich finde das hat nix, aber überhaupt nichts miteinander zu tun. Exceptions sind ein eigenes System. OO ein anderes.
-
man könnte es vielleicht so interpretieren: Exceptions brauchen kein OO, aber OO braucht Exceptions
-
nein.
ich meine auch,
OO braucht keine Exceptions! Widerleg das bitte, weil ich glaube dir eigentlich mehr als mir, normalerweise, aber im moment fällt mir nichts gescheites ein, was das widerlegen kännte.
-
[Flame]
Original erstellt von CodeWalker:
**Auch unter MSVC wirft eine "Integer Divide by Zero" keine C++-Exception, sondern eine C-Exception.float zaehler, nenner, result; zaehler=1.0; nenner=0.0; result=zaehler/nenner;
**
Vote for Ada95
procedure Division_durch_null is type float is digits 6; Zaehler, nenner, result : Float; begin zaehler := 1.0; nenner := 0.0; result := zaehler / nenner; exception when constraint_error => Put_Line("Division durch null !!"); end Division_durch_null;
so einfach sähe die Welt aus...
[/FLAME]nächtle
-
@Solaris:
ich bin auch kein C++ - Fanatiker
Zu Beginn eines Projekts muß ich entscheiden, wo der Break-Even zwischen Entwicklungszeit und Code-Effizienz liegt - und da entscheide ich mich u.U. auch für Visual Basic, Java, Delphi oder Assembler. Und C++ ist nun mal schnell in punkto Code-Effizienz, aber teuer in Sachen Entwicklungszeit...
Aber irgendwie ist C++ wie Schach-spielen - das macht die Faszination ausP.S.: ADA ist eine der (wenigen) Sprachen, die ich nicht aus Erfahrung kenne. Wo kann man mehr darüber erfahren?
-
Original erstellt von CodeWalker:
P.S.: ADA ist eine der (wenigen) Sprachen, die ich nicht aus Erfahrung kenne. Wo kann man mehr darüber erfahren?www.adapower.com www.adaic.com www.ada95.info http://www.adaic.org/standards/95lrm/html/RM-TOC.html http://www.auto.tuwien.ac.at/%7Eblieb/ADA-Skriptum_TeX/gesamt/gesamt.html http://groups.google.com/groups?oi=djq&as_ugroup=comp.lang.ada
[edit : @junix (nächster Beitrag), die halbe Welt weiss nicht wie man Ada
schreibt... nicht mal der Autor des Buches welches neben mir liegt... soll ich da erwarten dass es in einem C-Forum besser aussieht ?? ][ Dieser Beitrag wurde am 02.04.2003 um 23:55 Uhr von Solaris'dUKe editiert. ]
-
Ich bin enttäuscht, Duke, nicht mal ein Hinweis, dass er Ada falsch geschrieben hat? Ada ist schliesslich ein Name und keine Abkürzung (-;
-junix
-
*LOL* aber wenn ich PASCAL in einem C++-Source groß schreibe, beschwert sich doch auch keiner *grübel*
-
Auch wenns total OT ist : http://www.aimsedu.org/Math_History/Samples/ADA/Ada.html http://www.agnesscott.edu/lriddle/women/love.htm
Ada-Programmierer sind halt stolz auf "ihre" Lady
-
@Solaris:
hast Du mal ausprobiert, ob Ada die "Float Divide by Zero" unter Windows wirklich abfängt?
Weil das Problem hier nämlich eigentlich gar nicht in der Programmiersprache liegt, sondern bei Windows *Tip geb*
-
Original erstellt von CodeWalker:
[...] sondern bei Windows *Tip geb*Falsch... Ada-Compiler erstellen immer eine Runtime-Umgebung (Sub-System).
Egal ob du das Beispiel unter Windoof (wie ich vorhin), für Unix oder für den Motorola 64irgendwas übersetzt: Die Exception wird immer abgefangen!
-
@Solaris:
probier's doch mal aus - und obwohl ich Ada nicht kenne, denke ich, es klappt auch mit Ada nicht, denn: es gibt gar keine Exception !!!
-
@CodeWalker: trottel, natürlich funzt das unter windows!!
und jetzt zurück zum thema. ihr seid ja ganz schön abschweifend.
-
Original erstellt von CodeWalker:
und obwohl ich Ada nicht kenneDas ist genau der springende Punkt. Wie Duke schon sagte: Ada besitzt sein eigenes "Betriebssystem" das - wenn schon ein Betriebssystem vorhanden ist - einfach ein Subsystem bildet in dem der ganze Ada KlimBim läuft. Daher kann man auch beliebige Exception abfangen. Das funktioniert genau so auf einem Motorola 64xxx wie auf einem Linux/Unix/Solaris, einem Windows, einer Java VM und auf welche Plattform auch immer der AdaCompiler portiert wurde. Genau das ist ja einer der Punkte der Ada zu einer so "sicheren" Programmiersprache macht. So nun wolln wir aber nicht die Cpp-Mods ärgern und aufhören mit dem OT (-;
-junix
-
Original erstellt von CodeWalker:
@Solaris:
probier's doch mal aus - und obwohl ich Ada nicht kenne, denke ich, es klappt auch mit Ada nicht, denn: es gibt gar keine Exception !!!Natürlich gibt das eine Exception! Und sie WIRD abgefangen!
Nur weil in gewissen Programmiersprachen 0.0 != 0.0 ist, muss das ja nicht auch für andere gelten... :p[EDIT]
@junix: "aufhören mit dem OT" ... überredet... ich verschwinde ja schon
.. aber CodeWalker hat eher die interne Darstellung des Floats angesprochen... denn unter Cundund gibt das wirklich keine Exception ..
[/edit][ Dieser Beitrag wurde am 03.04.2003 um 09:00 Uhr von Solaris'dUKe editiert. ]
-
Hallo Bashar, du schuldest mir noch eine Antwort (siehe seite 2)
-
fisch: Ich denke, die Begründung irgendwo in Betrand Meyer: Object-Oriented Software Construction* gelesen zu haben, kann sie jetzt aber nicht mehr finden. Ich persönlich denke, dass du im strengen Sinne natürlich Recht hast. Aber man muß das im Gesamtzusammenhang sehen: Man programmiert ja eigentlich nicht OO weil man gerade mal was mit Objekten machen will, sondern um große Systeme durch Abstraktion besser beherrschen zu können. Die Fehlercode-Methode skaliert aber nicht gut über mehrere Abstraktionsschichten, da jede Funktion, die eine andere aufruft, genau wissen muß, welche Fehlercodes was bedeuten. Exceptions dagegen kann man ohne Beachtung solange die Kette der Aufrufer nach oben sickern lassen, bis sie gefangen und behandelt wird.
zugegeben: Meyer bringt Exceptions immer in den Design-By-Contract-Zusammenhang. Dabei ist es IMHO strittig, ob es überhaupt sinnvoll ist, die Verletzung von Assertions durch Exceptions zu behandeln.
-
OK, ich verstehe was du meinst