<?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[Warnings vermeiden]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe Funktionen mit Argumenten, die im Debug-Modus verwendet werden, im<br />
Release-Modus aber nicht. Folglich bekommt man beim Compilieren mit -DNDEBUG<br />
jede Menge Warnings serviert. Ein Beispiel ist folgendes:</p>
<pre><code class="language-cpp">void info(string who,string what)
{
#ifndef NDEBUG
	cout&lt;&lt;endl;
	if(who.length()&gt;0) cout&lt;&lt;magentaString(&quot;      &quot;+who+&quot;, INFO: &quot;+what)&lt;&lt;endl;
		else cout&lt;&lt;(&quot;      &quot;+who+&quot;INFO: &quot;+what)&lt;&lt;endl;
	cout&lt;&lt;endl;
#endif
}

tools.cpp:67: warning: unused parameter ‘who’
tools.cpp:67: warning: unused parameter ‘what’
</code></pre>
<p>Klar, man kann die Warnings des Compilers selektiv ausschalten, aber das soll<br />
nicht gemacht werden, sondern es sollte gezielt im Code gesagt werden 'Das<br />
hier ist kein Problem'. Gibts dafür ein #pragma oder einen anderen Trick?<br />
Verwendet wird GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/283711/warnings-vermeiden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 13:02:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/283711.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Mar 2011 08:49:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 08:49:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe Funktionen mit Argumenten, die im Debug-Modus verwendet werden, im<br />
Release-Modus aber nicht. Folglich bekommt man beim Compilieren mit -DNDEBUG<br />
jede Menge Warnings serviert. Ein Beispiel ist folgendes:</p>
<pre><code class="language-cpp">void info(string who,string what)
{
#ifndef NDEBUG
	cout&lt;&lt;endl;
	if(who.length()&gt;0) cout&lt;&lt;magentaString(&quot;      &quot;+who+&quot;, INFO: &quot;+what)&lt;&lt;endl;
		else cout&lt;&lt;(&quot;      &quot;+who+&quot;INFO: &quot;+what)&lt;&lt;endl;
	cout&lt;&lt;endl;
#endif
}

tools.cpp:67: warning: unused parameter ‘who’
tools.cpp:67: warning: unused parameter ‘what’
</code></pre>
<p>Klar, man kann die Warnings des Compilers selektiv ausschalten, aber das soll<br />
nicht gemacht werden, sondern es sollte gezielt im Code gesagt werden 'Das<br />
hier ist kein Problem'. Gibts dafür ein #pragma oder einen anderen Trick?<br />
Verwendet wird GCC.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036064</guid><dc:creator><![CDATA[assertx]]></dc:creator><pubDate>Fri, 18 Mar 2011 08:49:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 08:55:53 GMT]]></title><description><![CDATA[<p>Sollte eigentlich reichen:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
inline void Unused(const T&amp;)
{
}

void info(std::string who, std::string what)
{
    Unused(who);
    Unused(what);

    // ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2036066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036066</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 18 Mar 2011 08:55:53 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 09:08:21 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Sollte eigentlich reichen:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
inline void Unused(const T&amp;)
{
}

void info(std::string who, std::string what)
{
    Unused(who);
    Unused(what);

    // ...
}
</code></pre>
</blockquote>
<p>Gute Idee, danke. Aber weshalb &quot;template&quot; und &quot;inline&quot;? Templates sind<br />
doch immer inline.</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036071</guid><dc:creator><![CDATA[assertx]]></dc:creator><pubDate>Fri, 18 Mar 2011 09:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 09:10:59 GMT]]></title><description><![CDATA[<p>assertx schrieb:</p>
<blockquote>
<p>Gute Idee, danke. Aber weshalb &quot;template&quot; und &quot;inline&quot;? Templates sind<br />
doch immer inline.</p>
</blockquote>
<p>Nein. Für Templates gelten bloß ähnliche Regeln wie für inline, aber die besondere Bedeutung als Hinweisgeber für Compileroptimierungen ist nicht da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036075</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 18 Mar 2011 09:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 09:13:27 GMT]]></title><description><![CDATA[<p>Templates sind nicht immer inline, aber sie müssen immer vollständig definiert werden. Das <code>inline</code> ist im Prinzip unnötig, aber dadurch sollte der Compiler noch weniger auf die Idee kommen, die Funktion aufzurufen. Wobei moderne Compiler das sowieso komplett wegoptimieren sollten.</p>
<p>Ich verwende sonst eigentlich nie <code>template</code> und <code>inline</code> gemeinsam. Und zwar weil ich <code>inline</code> so gut wie nie zur Optimierung verwende, sondern nur um Funktionen im Header definieren zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036076</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 18 Mar 2011 09:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 09:19:06 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Templates sind nicht immer inline, aber sie müssen immer vollständig definiert werden. Das <code>inline</code> ist im Prinzip unnötig, aber dadurch sollte der Compiler noch weniger auf die Idee kommen, die Funktion aufzurufen. Wobei moderne Compiler das sowieso komplett wegoptimieren sollten.</p>
<p>Ich verwende sonst eigentlich nie <code>template</code> und <code>inline</code> gemeinsam. Und zwar weil ich <code>inline</code> so gut wie nie zur Optimierung verwende, sondern nur um Funktionen im Header definieren zu können.</p>
</blockquote>
<p>Ah, ok. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036082</guid><dc:creator><![CDATA[assertx]]></dc:creator><pubDate>Fri, 18 Mar 2011 09:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 09:27:49 GMT]]></title><description><![CDATA[<p>Noch etwas zum Thema Warnings:</p>
<pre><code class="language-cpp">// Faster and more intuitive than num=(num+1)%3...
inline int incIndexBy1(const unsigned num) 
{
	assert(num&lt;3);
	int incArray[]={1,2,0};
	return incArray[num];
}

tools.h:99: warning: array subscript is above array bounds
</code></pre>
<p>Im Release-Modus kommt das Warning, was eigenartig ist, da der Compiler gar<br />
nicht wissen kann, wie groß num ist. Gibt es einen Weg, ihm ohne ein 'if(..)'<br />
mitzuteilen, daß num&lt;3 ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036083</guid><dc:creator><![CDATA[assertx]]></dc:creator><pubDate>Fri, 18 Mar 2011 09:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 10:15:36 GMT]]></title><description><![CDATA[<p>Man kann Warnings auch mit #pragmas lokal deaktivieren. Im Visual Studio geht das mit <code>#pragma warning(push)</code> , <code>#pragma warning(disable: xxx) und [c]#pragma warning(pop)</code> soweit ich mich erinnere. Beim GCC werden die vermutlich ähnlich heißen.<br />
Trotzdem seltsam, dass die Warnung kommt. Sicher, dass nicht irgendwo die Funktion mit einem konstanten Wert größer als 3 aufgerufen wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036099</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 18 Mar 2011 10:15:36 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 10:30:25 GMT]]></title><description><![CDATA[<p>ipsec schrieb:</p>
<blockquote>
<p>Man kann Warnings auch mit #pragmas lokal deaktivieren. Im Visual Studio geht das mit <code>#pragma warning(push)</code> , <code>#pragma warning(disable: xxx) und [c]#pragma warning(pop)</code> soweit ich mich erinnere. Beim GCC werden die vermutlich ähnlich heißen.<br />
Trotzdem seltsam, dass die Warnung kommt. Sicher, dass nicht irgendwo die Funktion mit einem konstanten Wert größer als 3 aufgerufen wird?</p>
</blockquote>
<p>Die Funktion wird von vielen Stellen aus aufgerufen. Manchmal gibt es dabei<br />
Schleifen mit</p>
<pre><code class="language-cpp">// Vereinfachtes Beispiel:
for(unsigned num=0;num&lt;10;++num)
{
..bla
unsigned idx=incIndexBy1(num)
}
</code></pre>
<p>In diesen Fällen verhindern Bedingungen innerhalb von &quot;..bla&quot;, daß die Funktion<br />
aufgerufen wird. Da die zur Compilezeit noch unbekannt sind, warnt der Compiler<br />
erst mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036112</guid><dc:creator><![CDATA[assertx]]></dc:creator><pubDate>Fri, 18 Mar 2011 10:30:25 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 14:18:19 GMT]]></title><description><![CDATA[<p>ich habe irgendwie im hinterkopf rumspu(c)ken dass man so eine warung auch mit einem vorgestelltem void umgehen kann - dann spart man sich das template. Also</p>
<pre><code class="language-cpp">void myFunc(int val)
{ 
    #ifdef DEBUG 
        val += 2;
        /* usw */ 
    #else
        (void) val; 
    #endif
}
</code></pre>
<p>Hack oder ok? Schein ein C Style cast nach void zu sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036249</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 18 Mar 2011 14:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Warnings vermeiden on Fri, 18 Mar 2011 16:11:17 GMT]]></title><description><![CDATA[<p>Das ist schon okay, allerdings ist das <code>#ifdef #else #endif</code> jedes Mal etwas unschön. Die Fallunterscheidung ist eigentlich gar nicht nötig. Und ich würde das wenn schon in ein Makro verpacken, denn <code>Unused(x)</code> ist einfach klarer als <code>(void)x</code> .</p>
<p>Aber es könnte sein, dass gewisse Compiler dies nicht als Benutzung ansehen und die Warnung weiter ausgeben, oder sogar eine neue Warnung erzeugen (&quot;Ausdruck hat keine Effekte&quot; oder so).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2036309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2036309</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 18 Mar 2011 16:11:17 GMT</pubDate></item></channel></rss>