<?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[assert() vs std::invalid_argument]]></title><description><![CDATA[<p>Ist es legal, <code>assert()</code> auf ein Funktionsargument anzuwenden, oder sind dafür Exceptions gedacht?</p>
<p><code>assert()</code> find ich schöner, weil das kann ich später abstellen. Wenn das Programm fertig ist und fehlerfrei läuft, braucht es den Test nicht mehr und dann läuft das Programm schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299429/assert-vs-std-invalid_argument</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 05:13:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299429.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Feb 2012 17:27:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Fri, 10 Feb 2012 17:27:04 GMT]]></title><description><![CDATA[<p>Ist es legal, <code>assert()</code> auf ein Funktionsargument anzuwenden, oder sind dafür Exceptions gedacht?</p>
<p><code>assert()</code> find ich schöner, weil das kann ich später abstellen. Wenn das Programm fertig ist und fehlerfrei läuft, braucht es den Test nicht mehr und dann läuft das Programm schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179543</guid><dc:creator><![CDATA[kellerassel]]></dc:creator><pubDate>Fri, 10 Feb 2012 17:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Fri, 10 Feb 2012 17:32:17 GMT]]></title><description><![CDATA[<p>Was heisst denn &quot;legal&quot;? Natürlich darf man das machen und oft ist es sogar gute Praxis. Nämlich meist dann, wenn es sich um Logikfehler handelt -- d.h. Fehler, die bei korrekter Programmierung nicht mehr auftreten. Da diese gar nie auftreten dürften, kann man sie selten sinnvoll behandeln, daher ist <code>assert()</code> mit sofortigem Halt eine gute Sache.</p>
<p>Im Gegensatz dazu stehen Laufzeitfehler wie z.B. durch Benutzereingaben oder Ressourcenverwaltung verursacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179547</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 10 Feb 2012 17:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Fri, 10 Feb 2012 17:34:11 GMT]]></title><description><![CDATA[<p>Was heißt &quot;legal&quot;? Das ist eine Designentscheidung. <code>assert</code> dient einfach nur für Debugzwecke. Damit kannst du eben überprüfen, ob im normalen Programmablauf sich alles an deine Vorgaben hält. Eine Exception zu werfen ist eher für den normalen Progammablauf. Dies bietet dem Programmierer die Möglichkeit auf den Fehler zu reagieren und du bist abgesichert gegen Fehler, die du beim Debuggen nicht gefunden hast (zB durch fehlerhafte Nutzereingaben). Dafür haben die Überprüfungen/Exceptions einen teilweise recht enormen Overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179550</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 10 Feb 2012 17:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Fri, 10 Feb 2012 17:41:14 GMT]]></title><description><![CDATA[<p>Steht <code>assert()</code> nicht in direkter Konkurrenz zu <code>std::logic_error</code> und seinen Ableitungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179556</guid><dc:creator><![CDATA[kellerassel]]></dc:creator><pubDate>Fri, 10 Feb 2012 17:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sat, 11 Feb 2012 14:25:48 GMT]]></title><description><![CDATA[<p>Eigentlich schon.<br />
Was ich aber ganz nett finde ist ein Makro zu schreiben, dass sich je nach Flags wie Assert oder Exceptionwurf verhält.</p>
<p>zb</p>
<pre><code class="language-cpp">#define ASSERT_USE_EXCEPTION

MY_ASSERT(1 == 2); // Exception fliegt.

#undef ASSERT_USE_EXCEPTION

MY_ASSERT(1 == 2); // Normales Assert
</code></pre>
<p>Benutzt hab ich das aber eigentlich nur in Bibliotheken, für die ich Python-Wrapper schreibe. Ist nämlich unschön wenn assert den Python-Interpreter abschießt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179798</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 14:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sat, 11 Feb 2012 14:38:08 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Was ich aber ganz nett finde ist ein Makro zu schreiben, dass sich je nach Flags wie Assert oder Exceptionwurf verhält.</p>
</blockquote>
<p>Und im Usercode steht dann abhängig von diesem Makro ein <code>catch</code> , oder wie? Wäre es nicht klüger, für Python direkt ein spezifisches Assert-Makro zu schreiben als eines zu verwenden, das sich je nach Kontext anders verhält?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179805</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Feb 2012 14:38:08 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sat, 11 Feb 2012 15:01:35 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Was ich aber ganz nett finde ist ein Makro zu schreiben, dass sich je nach Flags wie Assert oder Exceptionwurf verhält.</p>
</blockquote>
<p>Und im Usercode steht dann abhängig von diesem Makro ein <code>catch</code> , oder wie? Wäre es nicht klüger, für Python direkt ein spezifisches Assert-Makro zu schreiben als eines zu verwenden, das sich je nach Kontext anders verhält?</p>
</blockquote>
<p>Naja, bei mir fliegt die Exception statt dem Assert nur wenn &quot;BUILD_PYTHON_MODULE&quot; definiert ist, das passiert nicht ausversehen. <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="😉"
    /><br />
Im C++-Code gehe ich nicht davon aus, dass das jemand abfängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179812</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:01:35 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 07:59:28 GMT]]></title><description><![CDATA[<p>Ich habe früher assert benutzt, bis ich irgendwann raus gefunden hab, dass das total unkonfortabel ist. assert bringt dir nur etwas, wenn der Debugger an ist. Eine schöne Exception kann dir direkt Fehlermeldung + Position im Code mit raus geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179999</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 12 Feb 2012 07:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 08:30:21 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Position im Code</p>
</blockquote>
<p>Wie das? Das wär ja mal genial, hab ich aber noch nicht endeckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180001</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Feb 2012 08:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 08:31:02 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>Position im Code</p>
</blockquote>
<p>Wie das? Das wär ja mal genial, hab ich aber noch nicht endeckt.</p>
</blockquote>
<p>Macros.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180002</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 12 Feb 2012 08:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 08:44:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">struct assertion_failure : std::logic_error
{
    assertion_failure(std::string const&amp; what)
        : logic_error(what)
    {}
};

#define TO_STRING_I(x) #x
#define TO_STRING(x) TO_STRING_I(x)
#define ASSERT(cond) if(!(cond)) throw assertion_failure(__FILE__ &quot;(&quot; TO_STRING(__LINE__) &quot;): ASSERT(&quot; #cond &quot;)&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180005</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 12 Feb 2012 08:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 08:45:11 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>Position im Code</p>
</blockquote>
<p>Wie das? Das wär ja mal genial, hab ich aber noch nicht endeckt.</p>
</blockquote>
<p>Macros.</p>
</blockquote>
<p>Ich hab manchmal sowas gemacht (nicht heulen):</p>
<pre><code class="language-cpp">void check_pos_throw(float x, const char* n_x, float y, const char* n_y)
{
    if(x &lt; 0
    || y &lt; 0
    || x &gt; SCREEN_W
    || y &gt; SCREEN_H)
        throw std::out_of_range(string(&quot;\ncheck_pos_throw: invalid arguments for position: X = &quot;) + itostr(x) + string(&quot;, name of X = &quot;) + string(n_x) + string(&quot; || Y = &quot;) + itostr(y) + string(&quot;, name of Y = &quot;) + n_y);
}
#define check_pos_throw(x,y) check_pos_throw(x, #x, y, #y)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180006</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Feb 2012 08:45:11 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 08:49:34 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Ich habe früher assert benutzt, bis ich irgendwann raus gefunden hab, dass das total unkonfortabel ist. assert bringt dir nur etwas, wenn der Debugger an ist. Eine schöne Exception kann dir direkt Fehlermeldung + Position im Code mit raus geben.</p>
</blockquote>
<p>Versteh ich nicht. Asserts sind doch eigentlich nur im Debugbuild aktiv. Machst du die Exceptions auch nur im Debugbuild rein? Und bei Windowsanwendungen öffnet sich beim Assert auch immer eine Messagebox und ich kann den VS-Debugger attachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180008</guid><dc:creator><![CDATA[&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;]]></dc:creator><pubDate>Sun, 12 Feb 2012 08:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:02:01 GMT]]></title><description><![CDATA[<p>Zwei Sachen versteh ich an PI's Idee nicht.</p>
<pre><code class="language-cpp">#define TO_STRING_I(x) #x
#define TO_STRING(x) TO_STRING_I(x)
</code></pre>
<p>Wieso nicht gleich</p>
<pre><code class="language-cpp">#define TO_STRING(x) #x
</code></pre>
<p>Und wozu brauchst du die Struktur <code>assertion_failure</code> , wenn sie sich sowieso wie <code>std::logic_error</code> verhält?<br />
Oder findest du den Namen besser?</p>
<p>Edit: Wäre das nicht dasselbe?</p>
<pre><code class="language-cpp">#define ASSERT(cond) if(!(cond)) \
                         throw std::logic_error(__FILE__ &quot;(&quot;# __LINE__ &quot;): ASSERT(&quot; #cond &quot;)&quot;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180009</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:01:42 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>Zwei Sachen versteh ich an PI's Idee nicht.</p>
<pre><code class="language-cpp">#define TO_STRING_I(x) #x
#define TO_STRING(x) TO_STRING_I(x)
</code></pre>
<p>Wieso nicht gleich</p>
<pre><code class="language-cpp">#define TO_STRING(x) #x
</code></pre>
</blockquote>
<p>Probiers aus. <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>Hacker schrieb:</p>
<blockquote>
<p>Und wozu brauchst du die Struktur <code>assertion_failure</code> , wenn sie sich sowieso wie <code>std::logic_error</code> verhält?</p>
</blockquote>
<p>Weil std::logic_error irgendwas ist und keine Assertion-Failure.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180011</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:05:04 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Zwei Sachen versteh ich an PI's Idee nicht.</p>
<pre><code class="language-cpp">#define TO_STRING_I(x) #x
#define TO_STRING(x) TO_STRING_I(x)
</code></pre>
<p>Wieso nicht gleich</p>
<pre><code class="language-cpp">#define TO_STRING(x) #x
</code></pre>
</blockquote>
<p>Probiers aus. <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>Hab ich. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180012</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:18:40 GMT]]></title><description><![CDATA[<p>Dann wirst du doch den Unterschied sehen, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180014</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:19:42 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Dann wirst du doch den Unterschied sehen, oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>N-Ö?</p>
<pre><code class="language-cpp">#define TO_STRING_I(x) #x
#define TO_STRING(x) TO_STRING_I(x)

int main()
{
    std::cout &lt;&lt; string() + TO_STRING_I(5) &lt;&lt; '\n'
              &lt;&lt; string() +  TO_STRING(6) &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180015</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:19:42 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 09:21:30 GMT]]></title><description><![CDATA[<p>Dann probiers mal mit __LINE__. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180016</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 12 Feb 2012 09:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 11:10:54 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Ich habe früher assert benutzt, bis ich irgendwann raus gefunden hab, dass das total unkonfortabel ist. assert bringt dir nur etwas, wenn der Debugger an ist. Eine schöne Exception kann dir direkt Fehlermeldung + Position im Code mit raus geben.</p>
</blockquote>
<p>Assertions benutzt man ja auch nur um Programmierfehler abzufangen.</p>
<pre><code class="language-cpp">assert(ptr != nullptr)
</code></pre>
<p>Gibt mir die Information darüber dass hier ein Pointer null ist und auch die Position im Code. Die Exception bringt hier keine Vorteile, ohne Macros aber Runtime-Overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180059</guid><dc:creator><![CDATA[Ethon__]]></dc:creator><pubDate>Sun, 12 Feb 2012 11:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Sun, 12 Feb 2012 17:43:46 GMT]]></title><description><![CDATA[<p>Ethon__ schrieb:</p>
<blockquote>
<p>Gibt mir die Information darüber dass hier ein Pointer null ist und auch die Position im Code. Die Exception bringt hier keine Vorteile, ohne Macros aber Runtime-Overhead.</p>
</blockquote>
<p>Natürlich sollte sich ein assert Ersatz der auf Expcetions basiert, sich genauso verhalten wie assert: im Release kein Overhead. Warum bist du jetzt schon der Dritte mit dieser Anmerkung?</p>
<p>So siehts aus:</p>
<pre><code class="language-cpp">#define EXCEPTION(message) Exception(message, __FILE__, __LINE__)

#ifndef NDEBUG
#define SIZE_CHECK(cond) do { if (!(cond)) throw EXCEPTION(&quot;size mismatch:&quot;#cond); } while (false)
#else
#define SIZE_CHECK(cond) do { (void)sizeof(cond); } while (false)
#endif

//Benutzung:
SIZE_CHECK(vector1.size()==vector2.size());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180249</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 12 Feb 2012 17:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Mon, 13 Feb 2012 00:13:10 GMT]]></title><description><![CDATA[<p>IMO sollte man das Semikolon ins Makro reinziehen, da Makro selbst weiß, dass eines benötigt wird. Für den Benutzer des Makros ist das oft nicht sofort ersichtlich. Meine Faustregel: Alle Makros so gestalten, dass keine abschließenden Semikola benötigt werden. Wozu du hier do-while verwendest, verstehe ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180330</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 13 Feb 2012 00:13:10 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Mon, 13 Feb 2012 00:25:54 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wozu du hier do-while verwendest, verstehe ich nicht.</p>
</blockquote>
<p>Um ein Semikolon hinter den Aufruf setzen zu können:</p>
<pre><code class="language-cpp">#define SET_TO_NULL(x) { x = 0; cout &lt;&lt; &quot;SET_TO_NULL&quot; &lt;&lt; endl; }

#define SET_TO_NULL2(x) do { x = 0; cout &lt;&lt; &quot;SET_TO_NULL2&quot; &lt;&lt; endl; } while(false)

int main()
{
	int x = 4;
	if(x != 0)
		SET_TO_NULL(x);
	else                                              // Fehler: else ohne if
		cout &lt;&lt; &quot;Nichts zu tun hier&quot; &lt;&lt; endl;

	x = 4;
	if(x != 0)
		SET_TO_NULL2(x);
	else
		cout &lt;&lt; &quot;Nichts zu tun hier&quot; &lt;&lt; endl;
}
</code></pre>
<p>Ich finde ein Semikolon hinterm Aufruf schöner, weil es so konform zu allen anderen Ausdrücken ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180332</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 00:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Mon, 13 Feb 2012 00:28:02 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Naja, ich finde es doof, dass man bei manchen Makros ein setzen muss und bei anderen nicht. Daher mach ichs so, dass man nie eines setzen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180334</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 13 Feb 2012 00:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Mon, 13 Feb 2012 09:25:00 GMT]]></title><description><![CDATA[<p>Und ich finde es doof, wenn Makros sich anders verhalten als Funktionsaufrufe.<br />
Da ist die do-while Technik ideal, denn die funktioniert überall wie ein Funktionsaufruf, auch in {}-losen Schleifen oder sogar verschachtelten if's.</p>
<p>z.T. ASSERT(): man kann ja auch nen Dump schreiben und den Prozess dann abbrechen. Dann hat man nicht nur Sourcefile/Zeilennummer, sondern gleich die Callstacks von allen Threads, und je nach Einstellungen sogar den gesamten Speicherinhalt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180381</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 13 Feb 2012 09:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to assert() vs std::invalid_argument on Mon, 13 Feb 2012 09:57:06 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>z.T. ASSERT(): man kann ja auch nen Dump schreiben und den Prozess dann abbrechen. Dann hat man nicht nur Sourcefile/Zeilennummer, sondern gleich die Callstacks von allen Threads, und je nach Einstellungen sogar den gesamten Speicherinhalt.</p>
</blockquote>
<p>Wie würde das mit dem Callstack plattform/compilerunabhängig gehen? Interesse an erweitertern Fehlermeldungen habe ich immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180391</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 13 Feb 2012 09:57:06 GMT</pubDate></item></channel></rss>