<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Fehler markieren; Exceptions, return-Codes oder Error-Attribut?]]></title><description><![CDATA[<p>Servus,</p>
<p>ich sehe aktuell drei Optionen, damit ich zwischen meinen Programmbausteinen merke, ob und wann etwas schief läuft: a) Exceptions, b) stets einen Status returnieren und pruefen, c) dem Objekt ein Attribut errorCode spendieren, dass im Konstruktor mit 0 besetzt wird und nur im Fehlerfall mit einem Fehlercode ueberschrieben wird.</p>
<p>Ich schwanke zwischen b und c, vermutlich nutze ich dann beides, das Attribut kann ich von ueberall her abfragen und pruefen und bei einem gescheiterten return-Code sehe ich direkt, wo es geknallt hat.</p>
<p>Was denkt ihr, welche Ansätze haben sich für euch bewährt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293367/fehler-markieren-exceptions-return-codes-oder-error-attribut</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 09:58:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293367.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Oct 2011 15:56:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 15:56:56 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich sehe aktuell drei Optionen, damit ich zwischen meinen Programmbausteinen merke, ob und wann etwas schief läuft: a) Exceptions, b) stets einen Status returnieren und pruefen, c) dem Objekt ein Attribut errorCode spendieren, dass im Konstruktor mit 0 besetzt wird und nur im Fehlerfall mit einem Fehlercode ueberschrieben wird.</p>
<p>Ich schwanke zwischen b und c, vermutlich nutze ich dann beides, das Attribut kann ich von ueberall her abfragen und pruefen und bei einem gescheiterten return-Code sehe ich direkt, wo es geknallt hat.</p>
<p>Was denkt ihr, welche Ansätze haben sich für euch bewährt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125872</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 15:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 16:03:12 GMT]]></title><description><![CDATA[<p>Eindeutig Exceptions...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125877</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 01 Oct 2011 16:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 16:03:36 GMT]]></title><description><![CDATA[<p>Ich bin nach deiner Liste etwas überrascht, dass du zu b und c tendierst, hatte ich doch beim Durchlesen selber erwartet, dass gleich die Frage kommt, warum man manchmal keine Exceptions benutzt. Wo siehst du denn die Vorteile der anderen, außer dass du dir damit mit viel Aufwand so etwas wie Exceptions basteln kannst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125878</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 01 Oct 2011 16:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 19:52:20 GMT]]></title><description><![CDATA[<p>Okay, C++-Exceptions habe ich nur kurz überflogen in diversen Büchern und da scheint es viel zu beachten zu geben. Ich habe aber nun ein Beispiel gefunden, was ich versucht habe auf meinen Fall anzupassen, mal schauen ob ich das richtig verstanden habe und ob ich damit vermutlich keine unangenehmen Überraschungen erleben werde.</p>
<p>Ich habe etwas Bammel gehabt, dass mir ja der Programmfluss mit einer Exception abhaut, dazu die zusätzliche Komplexität. Ebenso steht im Google-C++-Guide, dass die komplett auf Exceptions in deren Projekten verzichten, daher dachte ich, dass ich das auch so machen sollte. Aber naja, nachdem ich nun etwas nachgelesen habe, denke ich versuche ich mich mal kurz an Exceptions, in Java klappte das ja auch, wenn mir da IDE und Sprache auch einiges abgenommen hat.</p>
<p>Also los gehts mit Exceptions und C++ für mich:</p>
<pre><code class="language-cpp">// 1. Die Funktion wo es vielleicht kracht ...

double Facade::computePairEntropyOfStrings(const std::string&amp; stringToComputeOne, const std::string&amp; stringToComputeTwo) {
  try {
    checkForSameStringLength(stringToComputeOne, stringToComputeTwo);
  } catch( H2rException &amp;e ){
    std::cout &lt;&lt; e.what() &lt;&lt; std::endl;
    std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
  } catch(...) {
    throw; // schmeiss hoch
  }
  seqan::CharString columnStringOne(stringToComputeOne);
  seqan::CharString columnStringTwo(stringToComputeTwo);
  double res = getPairEntropyOfColumnStrings(columnStringOne, columnStringTwo);
  return res;
}

// 2. Die Funktion die als Werfer markiert ist ... 
void Facade::checkForSameStringLength(const std::string&amp; stringToComputeOne, const std::string&amp; stringToComputeTwo){  
  if ( stringToComputeOne.size() != stringToComputeTwo.size() ){
    throw H2rException;
  }
}

// 3. Meine Exception-Klasse
// aus Schneeweiss S. 161f
class H2rException : public std::exception 
{
public:
  H2rException(char *where) : txt(where) {}
  const char* what() const throw();
private:
  char *txt;
};

const char* H2rException::what() const throw()
{
  static std::string s;
  s = &quot;H2rException ist in &quot;;
  s += txt;
  s += &quot; aufgetreten.&quot;;
  return s.c_str();
}
</code></pre>
<p>... okay, mal schauen ob das klappt, aber es sollte nichts schiefgehen, da<br />
- wenn meine Exception erkannt wird, dann wird etwas Text ausgegeben und weiter nach oben geworfen, also terminate ausgeführt.<br />
- wenn eine andere Exception erkannt wird, dann wird durch die Ellipse auch terminate() aufgerufen, ich brauche mir also keine Sorgen machen, dass eine Exception auftritt, die unentdeckt bleibt. Habe ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125944</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 19:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 19:56:22 GMT]]></title><description><![CDATA[<p>Ich habe gerade keine Zeit, deinen Code durchzulesen, aber guck dir doch dies mal an:<br />
<a href="http://magazin.c-plusplus.net/artikel/Exception-Handling" rel="nofollow">http://magazin.c-plusplus.net/artikel/Exception-Handling</a><br />
<a href="http://www.c-plusplus.net/forum/219864" rel="nofollow">http://www.c-plusplus.net/forum/219864</a><br />
<a href="http://www.c-plusplus.net/forum/219865" rel="nofollow">http://www.c-plusplus.net/forum/219865</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125946</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 01 Oct 2011 19:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 20:02:45 GMT]]></title><description><![CDATA[<p>Du kannst in deinem Code vieles vereinfachen. Zuallererst, dass du nicht alles mit catch(...) fangen musst. Was du nicht fängst, wird automatisch wetergeworfen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Deine Exception-Klasse solltest du von einer der von std::exception abgeleiteten Klassen ableiten. Da gibt es z.B. length_error. Also könntest du deine Klasse wie folgt definieren:</p>
<pre><code class="language-cpp">// Error ist viel sexier als Exception
struct H2rError : std::length_error
{
    H2rError(const std::string&amp; msg)
        std::length_error(msg)
    {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2125951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125951</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 01 Oct 2011 20:02:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 20:39:18 GMT]]></title><description><![CDATA[<p>Ok, danke für den Tipp ... bis jetzt kompiliert mein Beispiel noch nicht sefix!<br />
Falls einer eine kompilierbare EigeneErrorKlasse parat hat, danke. Irgendwas passt da nicht, nichts kompiliert bei mir ich habe auch schon diverse Beipiele abgetippt und im Netz geschaut, etwa <a href="http://www.rpg-studio.de/scientia/C%2B%2B/Tutorial:_16._Fehlerbehandlung#Eigene_Exceptionklassen" rel="nofollow">http://www.rpg-studio.de/scientia/C%2B%2B/Tutorial:_16._Fehlerbehandlung#Eigene_Exceptionklassen</a></p>
<p>Komisch, mir fiel auch auf, dass da teilweise unterschiedliche Header eingebunden werden in den Beispielen, daher die Bitte nach einem kompilierbaren Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125959</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 20:39:18 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 20:48:03 GMT]]></title><description><![CDATA[<p>Du musst &lt;stdexcept&gt; statt &lt;exception&gt; inkludieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125962</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 01 Oct 2011 20:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 21:05:09 GMT]]></title><description><![CDATA[<p>Hilft mir nichts, brauch ein ganzes Minibeispiel, ich habe nun schon 5 Stück abgetippt, immer ist es irgendwas anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125964</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 21:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 21:13:42 GMT]]></title><description><![CDATA[<p>Du könntest ja mal die Fehlermeldungen zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125968</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 01 Oct 2011 21:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 22:57:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef H2RERROR_H
#define	H2RERROR_H

#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;exception&gt;

class H2rError : public std::exception {
public:
  virtual char const* what() throw();
};

char const* H2rError::what() throw(){
  return &quot;My Error Message&quot;;
}

#endif	/* H2RERROR_H */
</code></pre>
<p>Fehlermeldung:<br />
h2rerror.h: In member function ‘virtual const char* H2rError::what()’:<br />
In file included from facade.h:16,<br />
from main.h:9,<br />
from main.cpp:4:<br />
h2rerror.h:11: error: expected primary-expression before ‘,’ token<br />
h2rerror.h: At global scope:<br />
h2rerror.h:14: error: redefinition of ‘const char* H2rError::what()’<br />
h2rerror.h:11: error: ‘virtual const char* H2rError::what()’ previously defined here<br />
h2rerror.h:14: error: expected unqualified-id before ‘{’ token</p>
<p>Das Beispiel kommt von hier <a href="http://www.rpg-studio.de/scientia/C%2B%2B/Tutorial:_16._Fehlerbehandlung#Eigene_Exceptionklassen" rel="nofollow">http://www.rpg-studio.de/scientia/C%2B%2B/Tutorial:_16._Fehlerbehandlung#Eigene_Exceptionklassen</a> und wenn ich das Beispiel via Copy und Paste in ein neues Projekt stelle, dann klappt das auch - jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125994</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 22:57:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 23:03:50 GMT]]></title><description><![CDATA[<p>Wieso zum Himmel überschreibst du what()? Finger davon!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125995</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 01 Oct 2011 23:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 23:12:54 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">const char* H2rException::what() const throw()
{
  static std::string s;
  s = &quot;H2rException ist in &quot;;
  s += txt;
  s += &quot; aufgetreten.&quot;;
  return s.c_str();
}
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p><code>static std::string s;</code> ?<br />
Wirklich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2125999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2125999</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 01 Oct 2011 23:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 23:15:38 GMT]]></title><description><![CDATA[<p>Bezogen auf den zuletzt von Jay1980 geposteten Code:</p>
<p>Konkret fallen mir zwei Dinge auf: Erstens ist what() throw() nicht genug; die von std::exception verwendete Signatur ist</p>
<pre><code class="language-cpp">virtual char const *what() const throw();
</code></pre>
<p>Zweitens gehört die Definition der Methode nicht in den Header, sondern in eine eigene Übersetzungseinheit, sonst kriegst du damit später Linkerfehler. Beides wird deinen Compilerfehler aber nicht auslösen, sondern würde dir erst später Probleme verursachen. Die Fehlermeldung</p>
<blockquote>
<p>h2rerror.h:11: error: expected primary-expression before ‘,’ token</p>
</blockquote>
<p>gekoppelt mit der völligen Abwesenheit von Kommata in deinem Code macht mich ziemlich sicher, dass sich da ein Tippfehler eingeschlichen hat, den du nicht mit herauskopiert hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126001</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 01 Oct 2011 23:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 23:17:14 GMT]]></title><description><![CDATA[<p>Und von Exception-Spezifikationen lass lieber auch die Finger. Es gibt einen Grund, warum die seit neuestem deprecated sind.</p>
<p>Und vor Internettutorials hat man dich doch hier bestimmt auch schon gewarnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126003</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 01 Oct 2011 23:17:14 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sat, 01 Oct 2011 23:45:09 GMT]]></title><description><![CDATA[<p>Naja, bis ich da auf einem grünen Zweig bin, nehme ich assert-statements und exit mit Fehlercode - gibts halt jedesmal einen Abbruch, wenn irgendwo etwas schiefläuft. Das mit dem Error-Handling scheint mir echt mühsam und tricky zu sein, gerade wenn da wohl erst vor einiger Zeit Ansätze als deprecated eingestuft wurden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> das heisst ich sollte nur die Exceptions der STL nutzen und keine 'eigenen' bauen sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126015</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sat, 01 Oct 2011 23:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 00:28:49 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>Das mit dem Error-Handling scheint mir echt mühsam und tricky zu sein, gerade wenn da wohl erst vor einiger Zeit Ansätze als deprecated eingestuft wurden.</p>
</blockquote>
<p>Naja, die Community weiss eigentlich seit vielen Jahren dass die Exception-Specs in C++ nicht wirklich sinn machen.<br />
Da C++11 das erste echte Update für C++ ist (C++03 war bloss ne Revision des 98er Standards), konnten sie natürlich auch erst jetzt deprecated gemacht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126028</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 Oct 2011 00:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 00:49:54 GMT]]></title><description><![CDATA[<p>Nur kann man sie in diesem Fall ja nicht wirklich weglassen, weil std::exception::what() nun mal const throw() ist (bzw. const noexcept in C++11, aber throw() ist da ja ein Alias für noexcept).</p>
<p>Es ist ja auch so, dass die Kritik an Exception-Spezifikationen sich vor allem gegen solche richtet, die nur bestimmte Exceptions erlauben. Die Garantie zu geben, dass überhaupt keine Exception geworfen werden kann, ist auch im neuen Standard nicht veraltet, und ob jetzt throw() oder noexcept da steht, ist erst mal von mäßiger Wichtigkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126035</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 02 Oct 2011 00:49:54 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 01:19:22 GMT]]></title><description><![CDATA[<p>Naja, gibt schon Unterschiede zwischen throw() und noexcept.</p>
<p>Bei throw() war vorgeschrieben dass unexpected() aufgerufen wird wenn doch was geflogen kommt. Und unexpected() war es wiederum erlaubt selbst Exceptions zu werfen.<br />
Ein Programm konnte sich also nicht darauf verlassen, dass aus einer throw() Funktion niemals was rausfliegt.</p>
<p>Bei noexcept ist es dagegen garantiert. Wenn sich das Programm nicht daran hält, dann wird terminate() aufgerufen. Und terminate() darf eben keine Exceptions werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126046</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 Oct 2011 01:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 01:35:15 GMT]]></title><description><![CDATA[<p>Jay1980 schrieb:</p>
<blockquote>
<p>Naja, bis ich da auf einem grünen Zweig bin, nehme ich assert-statements und exit mit Fehlercode - gibts halt jedesmal einen Abbruch, wenn irgendwo etwas schiefläuft.</p>
</blockquote>
<p><code>assert</code> ist okay, um Logikfehler zu finden. Aber niemals für Laufzeitfehler. Und wieso <code>exit()</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126052</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 02 Oct 2011 01:35:15 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 02:04:05 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Naja, gibt schon Unterschiede zwischen throw() und noexcept.</p>
<p>Bei throw() war vorgeschrieben dass unexpected() aufgerufen wird wenn doch was geflogen kommt. Und unexpected() war es wiederum erlaubt selbst Exceptions zu werfen.<br />
Ein Programm konnte sich also nicht darauf verlassen, dass aus einer throw() Funktion niemals was rausfliegt.</p>
<p>Bei noexcept ist es dagegen garantiert. Wenn sich das Programm nicht daran hält, dann wird terminate() aufgerufen. Und terminate() darf eben keine Exceptions werfen.</p>
</blockquote>
<p>Das ist so nicht ganz korrekt. std::unexpected darf zwar eine Exception werfen, diese wird aber nur aus der Funktion herausgereicht, wenn sie entweder eh auf die Spezifikation passt oder die Spezifikation std::bad_exception beinhaltet, in welchem Fall die geworfene Exception durch ein std::bad_exception-Objekt ersetzt wird. Andernfalls wird std::terminate aufgerufen. So oder so kommt nichts aus der Funktion, was nicht in der Exception-Spezifikation steht. (Vgl. 15.5.2 (2) in C++03)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126059</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 02 Oct 2011 02:04:05 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 02:16:42 GMT]]></title><description><![CDATA[<p>Hm, das hatte ich dann falsch aufgeschnappt, sorry.<br />
Macht natürlich mehr Sinn so.</p>
<p>Nochwas: bei noexcept ist glaube ich vorgeschrieben dass kein Stack-Unwinding vor dem Aufruf von terminate() stattfindet. Auch ein Unterschied zu (und IMO eine Verbesserung gegenüber) throw(), wo Stack-Unwinding vorgeschrieben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126061</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 Oct 2011 02:16:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 02:38:24 GMT]]></title><description><![CDATA[<p>Ich fürchte, da habe ich ebenfalls schlechte Neuigkeiten:</p>
<p>C++11 15.5.1 (2) schrieb:</p>
<blockquote>
<p>In such cases, std::terminate() is called (18.8.3). In the situation where no matching handler is found, it is implementation-defined whether or not the stack is unwound before std::terminate() is called. <strong>In the situation where the search for a handler (15.3) encounters the outermost block of a function with a noexcept-specification that does not allow the exception (15.4), it is implementation-defined whether the stack is unwound, unwound partially, or not unwound at all before std::terminate() is called.</strong> In all other situations, the stack shall not be unwound before std::terminate() is called. An implementation is not permitted to finish stack unwinding prematurely based on a determination that the unwind process will eventually cause a call to std::terminate().</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2126066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126066</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 02 Oct 2011 02:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 06:54:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Jay1980 schrieb:</p>
<blockquote>
<p>Naja, bis ich da auf einem grünen Zweig bin, nehme ich assert-statements und exit mit Fehlercode - gibts halt jedesmal einen Abbruch, wenn irgendwo etwas schiefläuft.</p>
</blockquote>
<p><code>assert</code> ist okay, um Logikfehler zu finden. Aber niemals für Laufzeitfehler. Und wieso <code>exit()</code> ?</p>
</blockquote>
<p>Mir geht es nur darum, dass ich ein zu Ende laufen des Programms verhindern will, wenn ich merke, dass die Daten im Programm fehlerhaft sind - da dachte ich, wie ziehe ich denn am besten den Stecker und mir kam exit() und assert() - je nachdem, wie ich gerade pruefen kann. Ich habe aber nur den Thread da gesehen, <a href="http://www.c-plusplus.net/forum/210888" rel="nofollow">http://www.c-plusplus.net/forum/210888</a> und exit() scheint doch nicht so der Bringer zu sein, es wäre schon besser das Programm 'sanft' aber in jedem Fall zu beenden. Bei assert muss ich aufpassen, dass mir in der Release-Version nicht automatisch die Prüfung wegfällt, daher auch keine optimale Lösung, normalerweise sollten die assert-Statements da ja draußen oder entwertet sein, wenn ich das richtig verstanden habe.</p>
<p>Okay, mir scheint folgender Weg als geeignet: ich werfe einfach immer exceptions, aber lege dafür eben keine eigene Exception-Klasse an. Am Ende meines catch-Blocks beende ich das Programm in dem ich nach oben weiter werfen lasse, das heisst, das irgendwann terminate() kommt und ein sanftes Ende eintritt - soweit richtig?</p>
<p>Code poste ich dann, wenn ich damit etwas rumprobiert habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126078</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 02 Oct 2011 06:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 08:33:53 GMT]]></title><description><![CDATA[<p>Kann ja nicht sein, das du jetzt keine eigenen Exception-Typen definieren kannst? Das ist wirklich ganz einfach. Mach das so: leite von einer speziellen Std-Exception ab und übergebe im Ctor deinen Fehlertext. Es macht keinen Sinn what() zu überschreiben.</p>
<pre><code class="language-cpp">class my_error : public std::exception
{
     public:
         my_error(const std::string &amp;err) : std::exception(err)
         {};
};

throw my_error(&quot;Da ist was schief gelaufen&quot;);
</code></pre>
<p>Hier noch ein paar Infos:<br />
<a href="http://msdn.microsoft.com/en-us/library/t65b74ad.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/t65b74ad.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126085</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 02 Oct 2011 08:33:53 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler markieren; Exceptions, return-Codes oder Error-Attribut? on Sun, 02 Oct 2011 08:43:48 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24844">@Jay1980</a>: Du brauchst keine Exceptions nach oben werfen. Das tut C++ für dich automatisch, wenn du sie nicht fängst. Und ne Exception fangen und danach weiterwerfen ergibt selten bis gar nicht Sinn.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: So sah ja auch mein Vorschlag aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2126088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2126088</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 02 Oct 2011 08:43:48 GMT</pubDate></item></channel></rss>