Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

31

12.11.2008, 21:59

Zitat von »"Faule Socke"«

Wurde kein exception handler gefunden, wird unexpected() aufgerufen. Mit set_unexpected kann man eine eigene Funktion zur behandlung eines solchen fehlers angeben.


std::unexpected() wird aufgerufen wenn eine exception specification verletzt wurde. bei ner ungefangenen exception gibts gleich std::terminate(), sonst stimmts aber :)

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

32

13.11.2008, 09:21

Zitat von »"Nox"«

Nun mal eine ehrlich Meinung von mir: Ich hasse alle Menschen abgrundtief, die der Meinung sind mir per Exception mitteilen zu müssen, dass eine Datei nicht geladen werden konnte. Es reicht ein einfaches NULL oder sonstiger Fehlerwert, aber warum sind manche Menschen der Meinung aller Welt diese try-catch-Blöcke aufs Auge drücken zu müssen? Wenn etwas nicht geladen werden konnte, dann gibt man vielleicht ne Logmessage aus o.ä., aber schmeißt nicht wie ein Irrer mit exceptions umsich :!:

P.S: persönliche Meinung. Immerhin programmiere ich C++ nicht um mich bevormunden zu lassen :roll:

finde ich auch

@dot:
aber std::terminate() wird ja nicht nur von uncatched exception aufgerufen, oder?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

33

13.11.2008, 09:33

Zitat von »"Nox"«

Nun mal eine ehrlich Meinung von mir: Ich hasse alle Menschen abgrundtief, die der Meinung sind mir per Exception mitteilen zu müssen, dass eine Datei nicht geladen werden konnte. Es reicht ein einfaches NULL oder sonstiger Fehlerwert, aber warum sind manche Menschen der Meinung aller Welt diese try-catch-Blöcke aufs Auge drücken zu müssen? Wenn etwas nicht geladen werden konnte, dann gibt man vielleicht ne Logmessage aus o.ä., aber schmeißt nicht wie ein Irrer mit exceptions umsich :!:

P.S: persönliche Meinung. Immerhin programmiere ich C++ nicht um mich bevormunden zu lassen :roll:


Also bist du der Meinung, dass eine Bibliothek, die nur dazu da ist etwas zu laden eine eigene Logfile hat, nur damit sie da dann reinschreiben kann, dass etwas nicht funktioniert hat? Das hat doch nichts mehr mit der eigentlichen Aufgabe der Bibliothek zu tun. Ich würde natürlich ein einem eigenen Projekt auch nicht überall try.. catch schreiben wollen, ist aber auch kein Problem, da ich da ne ganz einfache Inline Methode schreiben kann, die das für mich macht und dann dort zentral bestimmen, was gemacht werden soll, wenn etwas nicht geladen werden konnte.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
Texture MyLoad (string)
{
  try
  {
      lib::load (string);
  }
  catch()
  {
     //ohh.. es ist was schief gegangen, ok

     // ich lade jetzt einfach einen roten Teddybären..

     return RedBear();
  }
}


Da kann man dann auch schön verschiedene Verhalten für die verschiedensten Möglichkeiten habe. (Debug/Release..)

Ich finde das persönlich viel angenehmer.
Aber wie du schon gesagt hast kann das eine ewige Diskussion werden und ich finde exceptions aus dem Grunde ein wenig ungeschickt, weil es da keine "richtige" Regel gibt wie und wo man die einzusetzen hat. Es ist einfach nicht so offensichtlich, für was der Mechanismus da ist..

EDIT:
Mir ist im obigen Beispiel klar, dass man das auch per Rückgabewert so implementieren kann, aber es gibt ja nicht nur Texturen.. 0 (-1, oder was auch immer) kann durchaus ein gültiger Rückgabewert sein und dann hat man ein Problem.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

34

13.11.2008, 15:33

Dann nutzt man halt bool ladeirgendwas(Res &); oder bool ladealle(Res *); oder oder oder ;) . Meine Meinung ist halt, dass man sowas sehr wohl machen kann. Weil was, wenn ich die Ressource nur fakultativ laden will (Tempdateien, die vielleicht vom letzten Start noch existieren)? Also ein nice_to_have? Dann muss ich mich mit exceptions rumschlagen, obwohl es garnicht so außgergewöhnlich ist.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

35

14.11.2008, 13:06

Zitat von »"Nexus"«

Zitat von »"knivil"«

Ueber Bibliotheksgrenzen hinweg sollten auch keine Exceptions geworfen werden.
Meinst du damit, dass andere Bibliotheken generell keine Exceptions werfen dürften (wenn man Exceptions, die in anderen Bibliotheken geworfen werden, in seinem eigenen Code behandelt, wird ja die Grenze der Bibliothek bereits überschritten)? Falls ja, dann bin ich anderer Meinung.

Genau, da das Binaerabbild von Compiler zu Compiler unterschiedlich ist. Falls du nur z.B. VisualStudio verwendst, dann spielt es wahrscheinlich keine Rolle. Aber falls andere deine Bibliothek als DLL nutzen, dann solltest du auf Exceptions verzichten, bzw. sie nicht aus der Bibliothek heraustragen.

Auch wenn man programmieren kann, wie man will: Es gibt standardkonform und es gibt idiomatisch. Wenn man Exceptions wie in C# oder Java benutzt, so ist man aber nur standardkonform (also der Compiler uebersetzt es).

Werbeanzeige