<?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[Frage zum Präprozessor]]></title><description><![CDATA[<p>Wie kann man mithilfe des Präprozessors die Länge eines String-Literals bestimmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/136602/frage-zum-präprozessor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 14:58:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/136602.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Feb 2006 18:54:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 18:54:47 GMT]]></title><description><![CDATA[<p>Wie kann man mithilfe des Präprozessors die Länge eines String-Literals bestimmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991749</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 11 Feb 2006 18:54:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 18:56:44 GMT]]></title><description><![CDATA[<p>Das ist nicht möglich.</p>
<p>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991751</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Feb 2006 18:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 19:34:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;const char* str&gt; struct StringSize
{
    enum { size = 1 + StringSize&lt;str + 1&gt;::size };
};

template&lt;&gt; struct StringSize&lt;0&gt;
{
    enum { size = 0 };
};

int main()
{
    cout &lt;&lt; StringSize&lt;&quot;Hallo Welt&quot;&gt;::size;
}
</code></pre>
<p>Warum geht das nicht? Ist gerade meinem Wahnsinn entsprungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991780</guid><dc:creator><![CDATA[Compiler®]]></dc:creator><pubDate>Sat, 11 Feb 2006 19:34:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 19:35:56 GMT]]></title><description><![CDATA[<p>Ja klar ich bin ja doof <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Aber gehts irgendwie mit Templates?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991785</guid><dc:creator><![CDATA[Compiler®]]></dc:creator><pubDate>Sat, 11 Feb 2006 19:35:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 20:07:12 GMT]]></title><description><![CDATA[<p>Nein, das geht auch nicht <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>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991809</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Feb 2006 20:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 20:10:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define NUM_ELEMENTS(x)  (sizeof((x)) / sizeof((x)[0]))
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991813</guid><dc:creator><![CDATA[.?.]]></dc:creator><pubDate>Sat, 11 Feb 2006 20:10:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 20:23:30 GMT]]></title><description><![CDATA[<p>eher so:</p>
<pre><code class="language-cpp">#define NUM_ELEMENTS(x) (sizeof(x)-1)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991824</guid><dc:creator><![CDATA[interpreter]]></dc:creator><pubDate>Sat, 11 Feb 2006 20:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 20:34:56 GMT]]></title><description><![CDATA[<p>.?. schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#define NUM_ELEMENTS(x)  (sizeof((x)) / sizeof((x)[0]))
</code></pre>
</blockquote>
<p>Funktioniert aber auch nur bei arrays und auch nur dann wenn das für den compiler &quot;sichtbar&quot; ist.</p>
<p>sprich:</p>
<pre><code class="language-cpp">int main()
{
      char blub[] = &quot;Foobar&quot;;
      size_t blub_size = NUM_ELEMENTS(blub) - 1; 
}
</code></pre>
<p>geht. Aber folgendes nicht:</p>
<pre><code class="language-cpp">void foobar( char blub[] )
{
     size_t blub_size = NUM_ELEMENTS(blub) -1; 
}

int main()
{
    char blub[] = &quot;Foobar&quot;;
    foobar(blub);
}
</code></pre>
<p>Dort würde aber wiederum das gehen:</p>
<pre><code class="language-cpp">template &lt; size_t N &gt;
void foobar( char (&amp;blub)[N] )
{
   std::cout &lt;&lt; N - 1&lt;&lt; std::endl;
}

int main()
{
    char blub[] = &quot;Foobar&quot;;
    foobar(blub);
}
</code></pre>
<p>Das geht aber auch nur direkt. So würde das natürlich dann wieder nicht gehen.</p>
<pre><code class="language-cpp">template &lt; size_t N &gt;
void foobar2( char (&amp;blub)[N] )
{
   std::cout &lt;&lt; N - 1&lt;&lt; std::endl;
}

void foobar( char blub[] )
{
    foobar2(blub);
}

int main()
{
    char blub[] = &quot;Foobar&quot;;
    foobar(blub);
}
</code></pre>
<p>Da das ganze sehr beschränkt einsatzfähig ist und auch nur für char-Arrays funktioniert ist es nicht wirklich immer hilfreich.</p>
<p>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/991838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991838</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sat, 11 Feb 2006 20:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 21:26:13 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Wie kann man mithilfe des Präprozessors die Länge eines <strong>String-Literals</strong> bestimmen?</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/991875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991875</guid><dc:creator><![CDATA[interpreter]]></dc:creator><pubDate>Sat, 11 Feb 2006 21:26:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sat, 11 Feb 2006 22:56:56 GMT]]></title><description><![CDATA[<p>kommt drauf an wie man das string-literal angibt.</p>
<pre><code class="language-cpp">const char* pStr = &quot;Hallo&quot;; // geht nicht
char str[] = &quot;Hallo&quot;; // geht
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991935</guid><dc:creator><![CDATA[&#x27;#&#x27;]]></dc:creator><pubDate>Sat, 11 Feb 2006 22:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sun, 12 Feb 2006 01:33:44 GMT]]></title><description><![CDATA[<p>'#' schrieb:</p>
<blockquote>
<p>kommt drauf an wie man das string-literal angibt.</p>
<pre><code class="language-cpp">const char* pStr = &quot;Hallo&quot;; // geht nicht
char str[] = &quot;Hallo&quot;; // geht
</code></pre>
</blockquote>
<p>Nein. Weder pStr noch str sind String Literale.<br />
DAS ist ein String Literal: &quot;foobar&quot;<br />
und dafür funktioniert auch</p>
<pre><code class="language-cpp">#define NUM_ELEMENTS(x) (sizeof(x)-1)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/991976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/991976</guid><dc:creator><![CDATA[interpreter]]></dc:creator><pubDate>Sun, 12 Feb 2006 01:33:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Sun, 12 Feb 2006 13:48:43 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Wie kann man mithilfe des Präprozessors die Länge eines String-Literals bestimmen?</p>
</blockquote>
<p>Ich würde dir auch das Makro empfehlen. Du kannst zwar auch die bereits angesprochene Funktion benutzen</p>
<pre><code class="language-cpp">template &lt; size_t N &gt;
size_t foobar2( char (&amp;)[N] )
{
    return N;
}
</code></pre>
<p>Bedenke aber, das Makro liefert einen konstanten Ausdruck, die Funktion nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/992251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/992251</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 12 Feb 2006 13:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zum Präprozessor on Tue, 14 Feb 2006 18:09:23 GMT]]></title><description><![CDATA[<p>Danke für die Vorschläge, aber mit sizeof oder Metaprogrammen gehts nicht, dass ist schon zu spät. Es geht darum, dass ich in einer Präprozessorschleife (aus Boost.Preprocessor) einen String so zerstückeln will, dass ich ihn zu einem Typen machen kann (so wie int_&lt;3&gt; aus Boost.MPL), aber das scheint ja nicht möglich zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994192</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 14 Feb 2006 18:09:23 GMT</pubDate></item></channel></rss>