<?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 mit Text durch Parameter]]></title><description><![CDATA[<p>Hi,</p>
<p>ich würde cassert gerne aussagekräftiger verwenden. Man erhält ja keine wirkliche Meldung, sondern nur eine Zeilenangabe. Das reicht zwar, es wäre dennoch praktischer, wenn da etwas steht.</p>
<p>Man kann doch ausnutzen, dass der gesamte Ausdruck angezeigt wird, wenn es zum assert kommt. Folgendes geht z.B.:</p>
<pre><code class="language-cpp">assert(false &amp;&amp; &quot;Das ist doch albern.&quot;);
</code></pre>
<p>Finde ich schon Mal praktisch. Wie macht ihr das gscheit?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308516/assert-mit-text-durch-parameter</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 18:05:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308516.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Sep 2012 10:52:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 10:52:46 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich würde cassert gerne aussagekräftiger verwenden. Man erhält ja keine wirkliche Meldung, sondern nur eine Zeilenangabe. Das reicht zwar, es wäre dennoch praktischer, wenn da etwas steht.</p>
<p>Man kann doch ausnutzen, dass der gesamte Ausdruck angezeigt wird, wenn es zum assert kommt. Folgendes geht z.B.:</p>
<pre><code class="language-cpp">assert(false &amp;&amp; &quot;Das ist doch albern.&quot;);
</code></pre>
<p>Finde ich schon Mal praktisch. Wie macht ihr das gscheit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254948</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 27 Sep 2012 10:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 11:37:56 GMT]]></title><description><![CDATA[<p>Braucht man in der Regel nicht. Die Asserts sind nur für den Programmierer gedacht, nicht etwa für den User, dass er eine hübsche Fehlermeldung sieht. Der Programmierer muss zur Behebung des Fehlers sowieso an der entsprechenden Codestelle nachsehen und hat dann auch den passenden Kontext.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254966</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 27 Sep 2012 11:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 11:58:06 GMT]]></title><description><![CDATA[<p>my_assert.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

#ifdef NDEBUG
#define ASSERT(cond, message)                        \
 do                                                  \
  {                                                  \
    if (!(cond))                                     \
     {                                               \
       std::cerr &lt;&lt; &quot;Assertion failed at line &quot;      \
                 &lt;&lt; __LINE__ &lt;&lt; &quot; in &quot; &lt;&lt; __FILE__   \
                 &lt;&lt; &quot;:\n&quot; &lt;&lt; message &lt;&lt; std::endl;   \
       std::exit(EXIT_FAILURE);                      \
     }                                               \
  }                                                  \
 while(0)                                    
#else                                        
#define ASSERT(cond, message) do {} while(0)
</code></pre>
<p>Ungetestet. Sind bestimmt irgendwo Schreibfehler drin, aber die Idee sollte klar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254977</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 Sep 2012 11:58:06 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 12:50:38 GMT]]></title><description><![CDATA[<p>Was ist nochmal schnell der Zweck des do { } while(false) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254999</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 27 Sep 2012 12:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 13:01:25 GMT]]></title><description><![CDATA[<p>semicolon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255004</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Thu, 27 Sep 2012 13:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 13:04:12 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Was ist nochmal schnell der Zweck des do { } while(false) ?</p>
</blockquote>
<p>Das ist eine Erinnerungshilfe, warum Makros gefährlich sind <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>Konkret geht es um:</p>
<pre><code class="language-cpp">#define makro1()   \
 zeile1();         \
 zeile2();

if (bla)
 makro1();   // Oh nein! zeile2() ist nun unabhängig vom if!

// Jedoch:
#define makro2()  \
 {                \
  zeile1();       \
  zeile2();       \
 }

if (bla)
 makro2();       // Oh nein! Das Semikolon macht so das if-else kaputt!
else
 foo();
</code></pre>
<p>Das <code>do ... while(0)</code> (oder äquivalente Konstrukte) sind daher der &quot;Standard&quot;weg, um Makros funktionsartige Syntax zu geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255005</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 27 Sep 2012 13:04:12 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 13:14:22 GMT]]></title><description><![CDATA[<p>Und diese Funktionsartige Syntax braucht jetzt wer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255014</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 27 Sep 2012 13:14:22 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 14:31:20 GMT]]></title><description><![CDATA[<p>Braucht man doch ständig, z.B. für Funktions-Generatoren oder einfach SeppJs Beispiel oben, um assert abzubilden. Es ist auch praktisch, um Exceptions zu werfen, bei denen man Dateinamen und Zeilennummer mit im Namen haben möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255057</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 27 Sep 2012 14:31:20 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 16:50:08 GMT]]></title><description><![CDATA[<p>mein assert sieht ein wenig anders aus:</p>
<pre><code class="language-cpp">namespace my
{
    namespace detail
    {
        inline
        void assert_impl(bool ok, const char* msg,
                         const char* file, const char* fct_name,
                         unsigned int line)
        {
            //using cout / endl

            if(ok)
                return;

            cout &lt;&lt; &quot;assertion failed (\&quot;&quot; &lt;&lt; msg &lt;&lt; &quot;\&quot;)&quot; &lt;&lt; &quot; \r\n&quot;
                &lt;&lt; &quot;\tin file \&quot;&quot; &lt;&lt; file &lt;&lt; &quot;\&quot;: line=&quot; &lt;&lt; line &lt;&lt; &quot; (function=\&quot;&quot; &lt;&lt; fct_name &lt;&lt; &quot;\&quot;)&quot; &lt;&lt; endl;
        }
    }
}

#if defined(NDEBUG)
#   define assert(x) ((void)0)
#else
#   if defined __GNUC__
#       define assert(x) my::detail::assert_impl(x, #x, __FILE__, &quot;unknown&quot;, __LINE__)
#   elif defined MSVC
#       define assert(x) my::detail::assert_impl(x, #x, __FILE__, __FUNCTION__, __LINE__)
#   else
#      define assert(x) my::detail::assert_impl(x, #x, &quot;unknown&quot;, &quot;unknown&quot;, 0)
#   endif
#endif
</code></pre>
<p>wenn ich das für nötig halte, schreib ich das assert trotzdem <code>assert(param &amp;&amp; &quot;bla&quot;);</code><br />
ist aber so selten, dass ich keine extra fct dafür habe</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255105</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 27 Sep 2012 16:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Thu, 27 Sep 2012 20:36:12 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#   if defined __GNUC__
#       define assert(x) my::detail::assert_impl(x, #x, __FILE__, &quot;unknown&quot;, __LINE__)
</code></pre>
</blockquote>
<p>Wenn mich nicht alles täuscht, kann der GCC mit</p>
<pre><code class="language-cpp">__file__
</code></pre>
<p>die aktuelle Funktion ausgeben. Mit Clang geht es 100%ig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255168</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Thu, 27 Sep 2012 20:36:12 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Fri, 28 Sep 2012 07:18:01 GMT]]></title><description><![CDATA[<p>Nö, beim GCC ist es auch __FUNCTION__ für die aktuelle Funktion.</p>
<blockquote>
<p>C99 introduces __func__, and GCC has provided __FUNCTION__ for a long time. Both of these are strings containing the name of the current function (there are slight semantic differences; see the GCC manual). Neither of them is a macro; the preprocessor does not know the name of the current function. They tend to be useful in conjunction with __FILE__ and __LINE__, though.</p>
</blockquote>
<p><a href="http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html" rel="nofollow">http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255205</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 28 Sep 2012 07:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to assert mit Text durch Parameter on Fri, 28 Sep 2012 09:18:41 GMT]]></title><description><![CDATA[<p>Ich nehme dafür immer BOOST_PRETTY_FUNCTION</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2255233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2255233</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 28 Sep 2012 09:18:41 GMT</pubDate></item></channel></rss>