engines, errorhandling, exceptions



  • hallo

    mich interessiert, wie ihr in euren spieleengines, das errorhandling realisiert. liefert jede eurer funktionen einen errorcode zurück, der angibt ob alles funktioniert hat oder nicht? oder benutzt ihr exceptions? ich selber habe noch nie exceptions benutzt und weiss auch nicht, wo der vorteil von exceptions liegen soll. errorcodes werden schliesslich auch in directx und vielen anderen api's benutzt, warum benutzen die keine exceptions? gibt es noch andere möglichkeiten fehler abzufangen/weiterzuleiten?

    danke



  • Hi !

    D3D und OpenGL verwenden keine Exceptions damit man die beiden Apis auch mit einem C Compiler compilen kann.

    Ich persönlich verwende nie Exceptions. Das Prinzip an sich ist zwar sehr gut, ich finde es aber recht umständlich zu schreiben.
    Meine Funktionen liefern alle einen bool zurück, Fehler werden per assert und Rückgabewert abgefangen.
    Ich kenne auch keine Engine/kein Game dass Exceptions verwendet.

    Über die Vorteile fragst du lieber mal im C++ Forum nach, die sind da Profis für sowas 🙂



  • Original erstellt von Headhunter:
    **Ich kenne auch keine Engine/kein Game dass Exceptions verwendet.

    Über die Vorteile fragst du lieber mal im C++ Forum nach, die sind da Profis für sowas :)**

    OGRE zB verwendet Exceptions.
    edit: Auch die Clanlib verwendet Exceptions. 🙂

    Zu den großen Vorteilen von Exceptions:

    • Fehlerbehandlung und "normaler" Code können sauber getrennt werden.
    • User der Engine können dazu gezwungen werden, Fehlerbehandlungsroutinen schreiben (nicht gefangene Exceptions beenden das Programm).
    • Zur Laufzeit kosten Exceptions nichts, es sei denn sie werden tatsächlich geworfen.

    Wobei IMHO Nr. 1 eigentlich schon als guter Grund ausreicht und Nr. 2 gerade für (offene) Engines ideal ist.

    edit: Irgendwie wollen die URLs nicht in meinem Beitrag bleiben... 😕

    [ Dieser Beitrag wurde am 18.01.2003 um 17:35 Uhr von nman editiert. ]



  • Exceptions sind auf jeden Fall Klasse, und vereinfachen das Errorhandling enorm, da sie ja den Stack aufräumen ! Du musst nicht mit temporären Rückgabewerten hantieren etc...

    Zur Laufzeit kosten Exceptions nichts, es sei denn sie werden tatsächlich geworfen.

    Sicher ? Der Compiler muss für den Stack-Trace extra code generieren und der dürfte natürlich Overhead erzeugen ! Aber das sollte nicht daran hindern Exceptions zu benutzen, der Overhead ist sehr gering und ausserdem kommen die meisten Exceptions nicht wirklich in den innerloops vor 😃

    @Exceptions und DLL's
    Hat da schon jemand eine ordentliche Lösung gefunden ?
    Ogre verwendet exceptions, lässt sich aber trotzdem zu einer lib compilieren. Diese libs sind aber nicht Standartisiert, wenn man sie also mit einem anderen Compiler verwendet könnte es probleme mit dem StackTrace geben und böse Sachen können passieren.
    Kann das jemand bestätigen ?



  • Original erstellt von ChaosAngel:
    Sicher ? Der Compiler muss für den Stack-Trace extra code generieren und der dürfte natürlich Overhead erzeugen !

    Er darf/ dürfte schon, ich dachte nur an Eckels Beschreibung des zero-cost models in "Thinking in C++", bin allerdings gerade zu faul, extra danach zu suchen. 😉



  • Ich hab das glaube ich in "More Effectiv C++" gelesen ...


Anmelden zum Antworten