<?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[Exception Specifications, GCC]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe grade mal getestet wie sich VC++ bei der Verwendung von Excpetion-Spefikationen verhält. Schlicht enntäuschend. Selbst VC++2005 ignoriert Excpetion-Spezifikationen fast völlig, sowohl zur Laufzeit also auch zu Compile-Zeit. Die meisten Spezifikationen (zumindest mit konkretem Typ) werden mit Warnung ignoriert. VC++ scheint hier zu versagen.</p>
<p>Mit GCC habe ich auch mal versucht zum compilieren, was ich dem VC2003 vorgesetzt habe. GCC scheint folgendes nicht zu begreifen:</p>
<pre><code class="language-cpp">void foo() throw(...)
{
}
</code></pre>
<p>und gibt auch ansonsten keinerlei Compile-Zeit-Fehler aus. Das scheint aber beides dem C++ Standard zu entsprechen. Weiß jemand ob GCC auch darüber hinaus mit Ausnahme-Spezifikationen vernünftig umgeht? Gibt es noch andere Compiler (windows, linux) die diesbezüglich den Standard achten? Viele Kommentare die ich (online) gefunden habe, sprechen davon, daß die meisten Compiler damit nicht zurecht kommen (allerdings sind solche Äußerungen meist schon veraltet).</p>
<p>Dann noch allgemein wegen des GCC: mit dem (aktuellen) GCC kenne ich mich nicht aus und ich habe beinahe nichts zu obigem Thema gefunden (inwieweit GCC Ausnahme-Spezifikationen unterstüzt). Kann mir jemand für die Zukunft sagen, wo ich Details zum GCC 4 finden kann? Gibt es gute Online-Dokus die über die Offizielle Dokumentation hinaus gehen und in denen man auch vernünftig *suchen* kann? Vielleicht gibts aktuelle Bücher mit gutem Index?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120780/exception-specifications-gcc</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 12:17:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120780.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Sep 2005 10:56:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 10:56:54 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich habe grade mal getestet wie sich VC++ bei der Verwendung von Excpetion-Spefikationen verhält. Schlicht enntäuschend. Selbst VC++2005 ignoriert Excpetion-Spezifikationen fast völlig, sowohl zur Laufzeit also auch zu Compile-Zeit. Die meisten Spezifikationen (zumindest mit konkretem Typ) werden mit Warnung ignoriert. VC++ scheint hier zu versagen.</p>
<p>Mit GCC habe ich auch mal versucht zum compilieren, was ich dem VC2003 vorgesetzt habe. GCC scheint folgendes nicht zu begreifen:</p>
<pre><code class="language-cpp">void foo() throw(...)
{
}
</code></pre>
<p>und gibt auch ansonsten keinerlei Compile-Zeit-Fehler aus. Das scheint aber beides dem C++ Standard zu entsprechen. Weiß jemand ob GCC auch darüber hinaus mit Ausnahme-Spezifikationen vernünftig umgeht? Gibt es noch andere Compiler (windows, linux) die diesbezüglich den Standard achten? Viele Kommentare die ich (online) gefunden habe, sprechen davon, daß die meisten Compiler damit nicht zurecht kommen (allerdings sind solche Äußerungen meist schon veraltet).</p>
<p>Dann noch allgemein wegen des GCC: mit dem (aktuellen) GCC kenne ich mich nicht aus und ich habe beinahe nichts zu obigem Thema gefunden (inwieweit GCC Ausnahme-Spezifikationen unterstüzt). Kann mir jemand für die Zukunft sagen, wo ich Details zum GCC 4 finden kann? Gibt es gute Online-Dokus die über die Offizielle Dokumentation hinaus gehen und in denen man auch vernünftig *suchen* kann? Vielleicht gibts aktuelle Bücher mit gutem Index?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873594</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 10:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 11:31:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void foo() throw(...)
{
}
</code></pre>
<p>Hä? Was soll denn das? Wenn Du willst, das alles geworfen werden kann, dann lass sie weg. Exception-Specs werden erst zur Laufzeit geprüft.</p>
<p>Ausm Standard:<br />
15.4 clause 1: [...] An type denoted in an exception-specification shall not denote an incomplete type. [...]</p>
<p>Ich würde jetzt mal so sagen, dass &quot;...&quot; kein vollständiger Typ ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873614</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 16 Sep 2005 11:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 11:34:31 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void foo() throw(...)
{
}
</code></pre>
<p>Hä? Was soll denn das? Wenn Du willst, das alles geworfen werden kann, dann lass sie weg. Exception-Specs werden erst zur Laufzeit geprüft.</p>
<p>Ausm Standard:<br />
15.4 clause 1: [...] An type denoted in an exception-specification shall not denote an incomplete type. [...]</p>
<p>Ich würde jetzt mal so sagen, dass &quot;...&quot; kein vollständiger Typ ist.</p>
</blockquote>
<p>Klar. Ich habe auch nichts gesagt daß es gut ist. Ich habe nur festgestellt, daß VC sowas nimmt. Vermutlich weil es Spezifikationen *mit* Typ überhauptnicht beachtet.</p>
<p>Keine Ideen zu meinen Fragen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873617</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 11:34:31 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 11:43:30 GMT]]></title><description><![CDATA[<p>Was heißt denn erbeachtet sie nicht?<br />
Hast Du Code, der das aufzeigt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873623</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 16 Sep 2005 11:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 11:51:56 GMT]]></title><description><![CDATA[<p>Dass zumindest ältere Versionen vom VC nicht sonderlich standard-kompatibel sind, ist hinreichend bekannt. Zumal dein Beispielcode auch kein gültiges C++ ist. Hab extra nochmal nachgelesen (15.3) - die Ellipsis (...) hat da nix zu suchen.</p>
<pre><code class="language-cpp">void klaus() throw (int)
{
   throw double(5);
}
</code></pre>
<p>Das wird unexpected() aufrufen, was wiederum terminate() aufruft und dein Programm beendet. Das sind eigentlich Standardabläufe, die viele Compiler unterstützen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873629</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 16 Sep 2005 11:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 11:53:38 GMT]]></title><description><![CDATA[<p>Jordy schrieb:</p>
<blockquote>
<p>VC++ scheint hier zu versagen.</p>
</blockquote>
<p>Was heisst hier &quot;versagen&quot;? Wie wärs, wenn du dir mal die Doku zum MSC durchliest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> C++ Language Reference, Exception Specifications</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873631</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 16 Sep 2005 11:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 12:04:42 GMT]]></title><description><![CDATA[<p>Auch noch ein wenig Lesestoff für Jordy und alle anderen interessierten:<br />
<a href="http://www.gotw.ca/publications/mill22.htm" rel="nofollow">http://www.gotw.ca/publications/mill22.htm</a></p>
<p>Superkurzfassung:<br />
Moral #1: Never write an exception specification.<br />
Moral #2: Except possibly an empty one, but if I were you I’d avoid even that.</p>
<p>Edit:<br />
Noch mehr interessantes dazu:<br />
<a href="http://www.gotw.ca/gotw/082.htm" rel="nofollow">http://www.gotw.ca/gotw/082.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/873634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873634</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 16 Sep 2005 12:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 12:22:01 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Jordy schrieb:</p>
<blockquote>
<p>VC++ scheint hier zu versagen.</p>
</blockquote>
<p>Was heisst hier &quot;versagen&quot;? Wie wärs, wenn du dir mal die Doku zum MSC durchliest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> C++ Language Reference, Exception Specifications</p>
</blockquote>
<p>Na, es versagt aus zwei Gründen: Zum ersten akzeptiert es throw(...), was nicht konform ist, und zweitens gibt es bei throw(typ) folgende Warnung aus: warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow), was auch nicht konform ist. Das heißt es werden nur throw() und throw(...) akzeptiert. Das nenne ich versagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873641</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 12:22:01 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 12:23:38 GMT]]></title><description><![CDATA[<p>Vergiss Exception Specifications und gut is <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/873642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873642</guid><dc:creator><![CDATA[vergessen!]]></dc:creator><pubDate>Fri, 16 Sep 2005 12:23:38 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 13:05:45 GMT]]></title><description><![CDATA[<p>vergessen! schrieb:</p>
<blockquote>
<p>Vergiss Exception Specifications und gut is <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
</blockquote>
<p>Darauf läufts hinaus, wenn man obige Links liest. Das größte Problem ist meines Erachtens: Was passiert wenn meine Spezifikationen nicht stimmen? Zu Compilzeit kann man das nicht ohne weiteres entdecken, außer man geht manuell alle Funktionen durch, immer unter dem Risko das man Vieles übersieht. Und dann wird das Programm beendet, obwohl es eigentlich fehlerfrei funktioniert.</p>
<p>Gibt es Tools, die versuchen Exception-Spezifikationen per Compilezeit-Analyse zu prüfen? Soetwas müsste unter bestimmten Einschränkungen möglich sein.</p>
<p>Ich erinnere mich an ein Tool, das zur Compilezeit (!!!) die Einhaltung von vordefinierten Wertebereichen von Funktions-Parametern überprüft hat. Das ganze war ziemlich komplex und hat viel Rechenzeit verbraucht wenn die Schachtelungstiefe zunahm, aber letztendlich hat es recht gut funktioniert.</p>
<p>Im Prinzip ähnelt das der Aufgabenstellung der Einhaltung von Exceptions-Spezifikationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873677</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 13:05:45 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 13:32:19 GMT]]></title><description><![CDATA[<p>Jordy schrieb:</p>
<blockquote>
<p>Gibt es Tools, die versuchen Exception-Spezifikationen per Compilezeit-Analyse zu prüfen?</p>
</blockquote>
<p>Ja, Java. Und du siehst, wie mühsam es dort ist.</p>
<blockquote>
<p>Soetwas müsste unter bestimmten Einschränkungen möglich sein.</p>
</blockquote>
<p>Richtig, aber die Einschränkungen sind ziemlich drastisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873701</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Fri, 16 Sep 2005 13:32:19 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 13:36:25 GMT]]></title><description><![CDATA[<p>Ringding schrieb:</p>
<blockquote>
<p>Jordy schrieb:</p>
<blockquote>
<p>Gibt es Tools, die versuchen Exception-Spezifikationen per Compilezeit-Analyse zu prüfen?</p>
</blockquote>
<p>Ja, Java. Und du siehst, wie mühsam es dort ist.</p>
<blockquote>
<p>Soetwas müsste unter bestimmten Einschränkungen möglich sein.</p>
</blockquote>
<p>Richtig, aber die Einschränkungen sind ziemlich drastisch.</p>
</blockquote>
<p>Aber für C++ hat deines Wissens nach noch niemand sowas versucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873709</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 13:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 13:38:38 GMT]]></title><description><![CDATA[<p>Du kannst das Problem haben, dass Du mit Bibliotheken arbeitest, von denen Du nicht weißt, ob sie mal eine Exception werfen. So kann Code, der Tage, Wochen oder Monate einwandfrei funktionierte plötzlich versagen. Versuch lieber exception-sicheren Code zu schreiben anstatt dich an den Exception-Spezifikationen aufzuhängen. Dazu gibt's im &quot;Guru of the Week&quot; oder im ausgelagerten Buch davon (Exceptional C++) gute Anleitungen.</p>
<p>Das Tool das Du meinst, könnte Flexelint sein <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>
]]></description><link>https://www.c-plusplus.net/forum/post/873714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873714</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 16 Sep 2005 13:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 13:44:08 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Du kannst das Problem haben, dass Du mit Bibliotheken arbeitest, von denen Du nicht weißt, ob sie mal eine Exception werfen. So kann Code, der Tage, Wochen oder Monate einwandfrei funktionierte plötzlich versagen. Versuch lieber exception-sicheren Code zu schreiben anstatt dich an den Exception-Spezifikationen aufzuhängen. Dazu gibt's im &quot;Guru of the Week&quot; oder im ausgelagerten Buch davon (Exceptional C++) gute Anleitungen.</p>
<p>Das Tool das Du meinst, könnte Flexelint sein <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>
</blockquote>
<p>&quot;PC-Lint&quot; wenn ich mich recht erinnere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /><br />
Ist das identisch?</p>
<p>Ja, klar, die Bibliothken sind ein Knackpunkt. Wenn man aber z.B. Bibliotheken verwendet, die, wie meine im Augenblick, grundsätzlich *garkeine* Exceptions werfen (ausgenommen der Standard-Exceptions der C++-Runtime) dann ist das kein großes Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873722</guid><dc:creator><![CDATA[Jordy]]></dc:creator><pubDate>Fri, 16 Sep 2005 13:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 18:03:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Jordy schrieb:<br />
Gibt es Tools, die versuchen Exception-Spezifikationen per Compilezeit-Analyse zu prüfen?<br />
Ja, Java. Und du siehst, wie mühsam es dort ist.</p>
<p>Zitat:<br />
Soetwas müsste unter bestimmten Einschränkungen möglich sein.<br />
Richtig, aber die Einschränkungen sind ziemlich drastisch.</p>
</blockquote>
<p>Ich find es eigentlich eine Schwäche von C++. Weil man jeden Typ throwen kann, kann eine Funktion ohne exception-Spezifikation alles werfen und eine zweite Funktion die erstere Benutzt kann nicht sagen, was geworfen wird, außer sie würde mit einem ein catch(...) alles fangen.<br />
Dafür dann Tips, dass man das nothrow besser in den Kommentar schreibt. Und das bei C++, wo es doch alle so geil finden, dass man dank Templates etc. alles zur Compile-Zeit prüfen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873928</guid><dc:creator><![CDATA[kartoffelsack]]></dc:creator><pubDate>Fri, 16 Sep 2005 18:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 18:19:17 GMT]]></title><description><![CDATA[<p>Unter Java sind Exception Specifications eine Qual!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/873943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/873943</guid><dc:creator><![CDATA[qual]]></dc:creator><pubDate>Fri, 16 Sep 2005 18:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to Exception Specifications, GCC on Fri, 16 Sep 2005 22:38:34 GMT]]></title><description><![CDATA[<p>Jordy schrieb:</p>
<blockquote>
<p>Na, es versagt aus zwei Gründen: Zum ersten akzeptiert es throw(...)</p>
</blockquote>
<p>Und wo ist das Problem dabei? Noch nie was von Compilererweiterungen gehört?</p>
<p>Jordy schrieb:</p>
<blockquote>
<p>und zweitens gibt es bei throw(typ) folgende Warnung aus: warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow), was auch nicht konform ist.</p>
</blockquote>
<p>Nun, kein Compiler unterstützt den Standard zu 100%. Bisher wurde dies beim MSC nicht integriert, da es zu viel Arbeit für zu wenig Nutzen war (wenn ich da einige Artikel noch richtig in Erinnerung habe). Vielleicht hast du ja bei kommenden Versionen mehr Glück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/874092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/874092</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 16 Sep 2005 22:38:34 GMT</pubDate></item></channel></rss>