<?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[eigenes assert]]></title><description><![CDATA[<p>hallo, ich brächte eine eigene version von assert</p>
<p>1. weil assert mir nicht flexible genug ist<br />
2. weil es mir um eher sanfte asserts geht</p>
<p>ich dachte an folgende implementierung :</p>
<pre><code class="language-cpp">template &lt;bool&gt;
eigenes_assert(bool bedingung, ...);

template&lt;&gt;
eigenes_assert&lt;false&gt;(bool bedingung, ...)
{}

template&lt;&gt;
eigenes_assert&lt;true&gt;(bool bedingung, ...)
{
do_something();
}
</code></pre>
<pre><code class="language-cpp">static const bool assert_enabled = false;
eigenes_assert&lt;assert_enabled&gt;(inVec.size() == outVec.size(),... );
</code></pre>
<p>zerfallen diese funktionsaufrufe bei &quot;false&quot; auch zu nichts, wie beim richtigen assert?</p>
<p>danke Treb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203186/eigenes-assert</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 14:02:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203186.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Jan 2008 21:07:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigenes assert on Sat, 19 Jan 2008 21:07:34 GMT]]></title><description><![CDATA[<p>hallo, ich brächte eine eigene version von assert</p>
<p>1. weil assert mir nicht flexible genug ist<br />
2. weil es mir um eher sanfte asserts geht</p>
<p>ich dachte an folgende implementierung :</p>
<pre><code class="language-cpp">template &lt;bool&gt;
eigenes_assert(bool bedingung, ...);

template&lt;&gt;
eigenes_assert&lt;false&gt;(bool bedingung, ...)
{}

template&lt;&gt;
eigenes_assert&lt;true&gt;(bool bedingung, ...)
{
do_something();
}
</code></pre>
<pre><code class="language-cpp">static const bool assert_enabled = false;
eigenes_assert&lt;assert_enabled&gt;(inVec.size() == outVec.size(),... );
</code></pre>
<p>zerfallen diese funktionsaufrufe bei &quot;false&quot; auch zu nichts, wie beim richtigen assert?</p>
<p>danke Treb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439657</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Sat, 19 Jan 2008 21:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sat, 19 Jan 2008 21:16:28 GMT]]></title><description><![CDATA[<p>Treb schrieb:</p>
<blockquote>
<p>zerfallen diese funktionsaufrufe bei &quot;false&quot; auch zu nichts, wie beim richtigen assert?</p>
</blockquote>
<p>das richtige assert 'zerfällt' in der release-version zu nichts. in der debug-version ist es vorhanden.<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439660</guid><dc:creator><![CDATA[DasistnichtBitWax]]></dc:creator><pubDate>Sat, 19 Jan 2008 21:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sat, 19 Jan 2008 21:18:42 GMT]]></title><description><![CDATA[<p>ja, ist das bei meiner version für</p>
<pre><code class="language-cpp">assert_enabled = false;
</code></pre>
<p>auch so? Oder erzeuge ich damit asm-code? Dann würde ich mich nämlich eher<br />
mit dem &quot;richtigen&quot; assert begnügen, als mehr laufzeit zu erzeugen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439661</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Sat, 19 Jan 2008 21:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sat, 19 Jan 2008 21:26:17 GMT]]></title><description><![CDATA[<p>ich denke mal, ein durchschnittlicher compiler sollte es rausschmeissen, wenn assert_enabled==false. wahrscheinlich brauchst du dafür noch nicht mal templates.<br />
eine andere möglichkeit wäre, mit dem preprozessor zu arbeiten (#ifdef). dann kannst du dir 100%ig sicher sein, dass nichts mehr vorhanden ist, wenn du's nicht willst<br />
<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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439662</guid><dc:creator><![CDATA[DasistnichtBitWax]]></dc:creator><pubDate>Sat, 19 Jan 2008 21:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sun, 20 Jan 2008 10:52:14 GMT]]></title><description><![CDATA[<p>Der Unterschied ist eher grundsätzlich: Das normale assert prüft die Bedingung zur Laufzeit, Dein eigenes_assert prüft die Bedingung bereits zur Compilezeit, d.h. sie muss konstant sein. do_something wird zur Laufzeit ausgeführt, wenn die Bedingung zur Compilezeit true war (ist das btw. was Du willst?).</p>
<p>Allerdings kann man davon ausgehen, dass der Compiler - wenn die Definition von eigenes_assert&lt;false&gt; sichtbar ist - den Funktionsaufruf bei so einer trivialen, weil leeren, Funktion inlined und für diese Zeile keinen Code erzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439810</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 20 Jan 2008 10:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sun, 20 Jan 2008 11:05:12 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Der Unterschied ist eher grundsätzlich: Das normale assert prüft die Bedingung zur Laufzeit, Dein eigenes_assert prüft die Bedingung bereits zur Compilezeit, d.h. sie muss konstant sein. do_something wird zur Laufzeit ausgeführt, wenn die Bedingung zur Compilezeit true war (ist das btw. was Du willst?).</p>
</blockquote>
<p>Ne, schau Dir den Code nochmal genauer an. Der Template-Parameter ist nur dazu da, die Assertions an- bzw. auszuschalten. Die Bedingung ist der nachfolgende Parameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439814</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 20 Jan 2008 11:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sun, 20 Jan 2008 11:13:58 GMT]]></title><description><![CDATA[<p>Die Auswertung der Funktionsargumente findet immer statt, nicht so bei assert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439820</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 20 Jan 2008 11:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Sun, 20 Jan 2008 11:29:41 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Ne, schau Dir den Code nochmal genauer an. Der Template-Parameter ist nur dazu da, die Assertions an- bzw. auszuschalten. Die Bedingung ist der nachfolgende Parameter.</p>
</blockquote>
<p>Ups, stimmt natürlich auffallend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439827</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 20 Jan 2008 11:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Mon, 21 Jan 2008 19:05:12 GMT]]></title><description><![CDATA[<p>und da du eh makros nehmen wirst, kannste jetzt sogar im assert-fall vor dem werfen der exception ein __asm int 3; reinfummeln. das ist super-angenehm, wenn der debugger an dieser stelle anhält und du die variablen in der IDE inspizieren kannst.</p>
<p>es folgt der erstebeste code, den ich dazu fand:</p>
<pre><code class="language-cpp">#ifndef DEBUG_H
#define DEBUG_H
#pragma once

void traceException(char const* file,int line,Exception const&amp; exc);//loggt sie z.B. in ein file
inline void doNothing(){};//zum semikolon-abfackeln
bool isDebuggerPresent();//in der winapi

//ein breakpoint im code
#define DBREAK() if(isDebuggerPresent()){__asm int 3}else doNothing()

//returnTrue() macht ne warnung weg
#define DTHROW(exc) if(returnTrue()){traceException(__FILE__,__LINE__,exc);DBREAK();throw exc;}else doNothing()

#ifndef NDEBUG
#define ASSERTE(cond,exc) if(!bool(cond))DTHROW(exc);else doNothing()
#else
#define ASSERTE(cond,exc)
#endif

#endif
</code></pre>
<p>bei MSVC ist</p>
<pre><code class="language-cpp">#else
#define ASSERTE(cond,exc) _assume(cond)
#endif
</code></pre>
<p>immer eine überlegung wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1440867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440867</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 21 Jan 2008 19:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Mon, 21 Jan 2008 21:52:43 GMT]]></title><description><![CDATA[<p>Statt &quot;doNothing&quot; nimmt man normalerweise sowas wie &quot;((void)0)&quot;, und assert() sollte IMO nicht &quot;leer&quot; definiert werden, sonst bekommt man mit bestimmtem Code Probleme.<br />
Auch sollte assert IMO an möglichst allen Stellen gehen wo eine void-Funktion geht, also z.B. auch in solchen Konstrukten:</p>
<p>z.B. sowas:</p>
<pre><code class="language-cpp">void foo(int x)
{
    assert(x &lt; 100), printf(&quot;%d&quot;, x);
    int y = (assert(x != 0), 100/x);
}
</code></pre>
<p>(Der Code ist natürlich grausam, und soll nur zeigen wo ein über &quot;if&quot; implementiertes &quot;assert&quot; Probleme bereiten könnte.)</p>
<p>Das lässt sich z.B. erreichen indem man assert() über &amp;&amp; oder || definiert, so wie es in den MSVC Headern gemacht wird:</p>
<pre><code class="language-cpp">#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1440959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1440959</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 21 Jan 2008 21:52:43 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Tue, 22 Jan 2008 04:05:49 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Sund assert() sollte IMO nicht &quot;leer&quot; definiert werden, sonst bekommt man mit bestimmtem Code Probleme.</p>
</blockquote>
<p>jup. fehler von mir.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Auch sollte assert IMO an möglichst allen Stellen gehen wo eine void-Funktion geht, also z.B. auch in solchen Konstrukten:<br />
...</p>
</blockquote>
<p>kriege ich dann auch hin, dass __asm int 3; ohne funktionsaufruf klappt? glaube nicht. der funktionsaufruf wäre grausam, der debugger wäre immer innerhalb der funktion statt auf der fehlerzeile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441017</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 22 Jan 2008 04:05:49 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Tue, 22 Jan 2008 11:17:10 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Auch sollte assert IMO an möglichst allen Stellen gehen wo eine void-Funktion geht, also z.B. auch in solchen Konstrukten:<br />
...</p>
</blockquote>
<p>kriege ich dann auch hin, dass __asm int 3; ohne funktionsaufruf klappt? glaube nicht. der funktionsaufruf wäre grausam, der debugger wäre immer innerhalb der funktion statt auf der fehlerzeile.</p>
</blockquote>
<p>Keine Ahnung, ist für mich aber kein Ding. Mich persönlich stört es nicht wenn ein assert() irgendwo Triggert wo noch ein oder zwei Funktionen zusätzlich auf dem Call-Stack sind. Man sieht ja trotzdem recht schnell wohers eigentlich kommt, gerade dazu ist das Call-Stack ja gut <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441191</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 22 Jan 2008 11:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to eigenes assert on Tue, 22 Jan 2008 11:20:40 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Keine Ahnung, ist für mich aber kein Ding. Mich persönlich stört es nicht wenn ein assert() irgendwo Triggert wo noch ein oder zwei Funktionen zusätzlich auf dem Call-Stack sind. Man sieht ja trotzdem recht schnell wohers eigentlich kommt, gerade dazu ist das Call-Stack ja gut <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="🙂"
    /></p>
</blockquote>
<p>Mich hingegen stört es tierisch. Der neue VC++-Compiler (bzw. die neue STL) schickt einen bei einem Laufzeitfehler erst mal ins Nirvana, aus dem man sich dann hervorkämpfen muss. Finde ich nicht gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441195</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 22 Jan 2008 11:20:40 GMT</pubDate></item></channel></rss>