<?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[stdarg + float&#x2F;double ??????????]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Momentan spiele ich etwas mit den stdarg-Makros herum und stosse leider bei der Behandlung von Fliesskommazahlen auf einige Schwierigkeiten.</p>
<p>Folgende Funktion mit variabler Argumentenliste soll nichts weiter machen als alle Argumente der Reihe nach gemaess den in 'a_types' vorgegebenen primitiven Typen auf dem Bildschirm auszugeben:<br />
( um das Ganze etwas einfacher zu halten werden lediglich 2 intrinsische Typen erkannt: int ('i') und float ('f') )</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;stdarg.h&gt;

//--------------------------------------------------------

void foo(char* a_types, ...)
{
   va_list args;
   va_start(args,a_types);

   while(*a_types)
   {
       switch(*a_types++)
       {
           case 'i':
           cout&lt;&lt;&quot;integer: &quot;&lt;&lt;va_arg(args,int)&lt;&lt;endl;
           break;

           case 'f':
           cout&lt;&lt;&quot;float: &quot;&lt;&lt;va_arg(args,float)&lt;&lt;endl;
           break;
       }
   }

   va_end(args);
}

//--------------------------------------------------------

int main()
{
   foo(&quot;if&quot;, 1, 1.0);
   return(0);
}
</code></pre>
<p>Mit den Ganzzahlen gibt es keinerlei Schwierigkeiten ( short, int, long ... )<br />
Jedoch bei den Fliesskommawerten scheint irgend etwas schiefzugehen.<br />
Ausgabe im obigen Beispiel:</p>
<pre><code>integer: 1
float: 0
</code></pre>
<p>Ich bin mir ziemlich sicher, dass es mein eigener Fehler ist! (benutze die stdarg-Makros zum ersten mal!) Darum bitte etwas Nachsicht! <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>Ich komme einfach nicht drauf wo der Fehler liegt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Waere wirklich toll, wenn Ihr mir weiterhelfen koenntet!</p>
<p>Vielen Dank im voraus!</p>
<p>Gruesse,<br />
TS++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133360/stdarg-float-double</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 21:45:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133360.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jan 2006 09:19:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 09:25:49 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Momentan spiele ich etwas mit den stdarg-Makros herum und stosse leider bei der Behandlung von Fliesskommazahlen auf einige Schwierigkeiten.</p>
<p>Folgende Funktion mit variabler Argumentenliste soll nichts weiter machen als alle Argumente der Reihe nach gemaess den in 'a_types' vorgegebenen primitiven Typen auf dem Bildschirm auszugeben:<br />
( um das Ganze etwas einfacher zu halten werden lediglich 2 intrinsische Typen erkannt: int ('i') und float ('f') )</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;stdarg.h&gt;

//--------------------------------------------------------

void foo(char* a_types, ...)
{
   va_list args;
   va_start(args,a_types);

   while(*a_types)
   {
       switch(*a_types++)
       {
           case 'i':
           cout&lt;&lt;&quot;integer: &quot;&lt;&lt;va_arg(args,int)&lt;&lt;endl;
           break;

           case 'f':
           cout&lt;&lt;&quot;float: &quot;&lt;&lt;va_arg(args,float)&lt;&lt;endl;
           break;
       }
   }

   va_end(args);
}

//--------------------------------------------------------

int main()
{
   foo(&quot;if&quot;, 1, 1.0);
   return(0);
}
</code></pre>
<p>Mit den Ganzzahlen gibt es keinerlei Schwierigkeiten ( short, int, long ... )<br />
Jedoch bei den Fliesskommawerten scheint irgend etwas schiefzugehen.<br />
Ausgabe im obigen Beispiel:</p>
<pre><code>integer: 1
float: 0
</code></pre>
<p>Ich bin mir ziemlich sicher, dass es mein eigener Fehler ist! (benutze die stdarg-Makros zum ersten mal!) Darum bitte etwas Nachsicht! <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>Ich komme einfach nicht drauf wo der Fehler liegt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Waere wirklich toll, wenn Ihr mir weiterhelfen koenntet!</p>
<p>Vielen Dank im voraus!</p>
<p>Gruesse,<br />
TS++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968649</guid><dc:creator><![CDATA[TS++]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 09:22:35 GMT]]></title><description><![CDATA[<p>Ich weiß nicht, wie va_arg castet, aber 1.0 ist <strong>kein</strong> float, sondern double. Probiers vielleicht mal mit 1.0f.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968653</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 09:27:35 GMT]]></title><description><![CDATA[<p>1.0 ist keine float-Konstante, sondern double - und die werden üblicherweise etwas anders dargestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968657</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 14:31:46 GMT]]></title><description><![CDATA[<p>Hallo .filmor!</p>
<pre><code class="language-cpp">foo(&quot;if&quot;, 1, 1.0f);
</code></pre>
<p>fuehrt leider immernoch zu der Ausgabe:</p>
<pre><code>integer: 1
float: 0
</code></pre>
<p>Gruesse,<br />
TS++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968660</guid><dc:creator><![CDATA[TS++]]></dc:creator><pubDate>Tue, 17 Jan 2006 14:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 09:49:34 GMT]]></title><description><![CDATA[<p>Es gibt afaik ein paar Grundumwandlungen, die der Compiler für variable Argumente durchführt - dazu gehört char nach int und auch float nach double. Also hast du in jedem Fall dort double-Parameter in der Funktion.</p>
<p>(Anmerkung: Was kommt den raus, wenn du &quot;va_arg(args,double)&quot; verwendest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968672</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Tue, 17 Jan 2006 09:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 14:30:15 GMT]]></title><description><![CDATA[<p>Hallo CStoll!</p>
<p>Danke fuer die Antwort!</p>
<p>Bin auch grad auf folgende Zeilen gestossen:</p>
<blockquote>
<p>If the type in question is one that gets promoted, the promoted type<br />
should be used as the argument to va_arg(). The following describes<br />
which types are promoted (and to what):<br />
- short is promoted to int<br />
- float is promoted to double<br />
- char is promoted to int</p>
</blockquote>
<p>Ich probiers gleich mal aus!</p>
<p>Gruesse,<br />
TS++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968680</guid><dc:creator><![CDATA[TS++]]></dc:creator><pubDate>Tue, 17 Jan 2006 14:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to stdarg + float&#x2F;double ?????????? on Tue, 17 Jan 2006 14:33:27 GMT]]></title><description><![CDATA[<p>Endlich, jetzt funktioniert's!!! <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="🙂"
    /><br />
Das mit den Grundumwandlungen hab ich wirklich nicht gewusst!</p>
<p>Danke fuer Eure Hilfe!</p>
<p>Gruesse,<br />
TS++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968954</guid><dc:creator><![CDATA[TS++]]></dc:creator><pubDate>Tue, 17 Jan 2006 14:33:27 GMT</pubDate></item></channel></rss>