<?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[einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde]]></title><description><![CDATA[<p>hi,<br />
ich habe folgende Funktion:</p>
<pre><code class="language-cpp">void tmpfunc(...)
{
	va_list arg;
	int Anzahl = 1;
	va_start(arg,Anzahl);
	float f = va_arg(arg,float);
}
</code></pre>
<p>diese Funktion rufe ich nun auf die folgende Art auf:</p>
<pre><code class="language-cpp">float f = 5.0;
tmpfunc(f);
</code></pre>
<p>Das Problem ist jetzt nur, dass das f in der Funktion nicht den Wert von 5 hat, sondern irgendwas stark negatives....</p>
<p>Mir ist folgendes aufgefallen: Übernimmt eine Funktion direkt eine float so wird der Wert deim Callen direkt mit &quot;push val&quot; übergeben, ruft man dagegen eine Funktion mit variabler Parameterliste, so rechnet er die Zahl erst um und übergibt sie dann:</p>
<pre><code>fld         dword ptr [f] 
sub         esp,8 
fstp        qword ptr [esp]
</code></pre>
<p>Kennt da jemand einen Ausweg aus der Misere (außer, dass man double als Typ verwendet) ?</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186982/einen-float-wert-auslesen-der-einer-funktion-mit-variabler-parameterliste-übergeben-wurde</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 14:50:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186982.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Jul 2007 11:23:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Sat, 14 Jul 2007 11:23:18 GMT]]></title><description><![CDATA[<p>hi,<br />
ich habe folgende Funktion:</p>
<pre><code class="language-cpp">void tmpfunc(...)
{
	va_list arg;
	int Anzahl = 1;
	va_start(arg,Anzahl);
	float f = va_arg(arg,float);
}
</code></pre>
<p>diese Funktion rufe ich nun auf die folgende Art auf:</p>
<pre><code class="language-cpp">float f = 5.0;
tmpfunc(f);
</code></pre>
<p>Das Problem ist jetzt nur, dass das f in der Funktion nicht den Wert von 5 hat, sondern irgendwas stark negatives....</p>
<p>Mir ist folgendes aufgefallen: Übernimmt eine Funktion direkt eine float so wird der Wert deim Callen direkt mit &quot;push val&quot; übergeben, ruft man dagegen eine Funktion mit variabler Parameterliste, so rechnet er die Zahl erst um und übergibt sie dann:</p>
<pre><code>fld         dword ptr [f] 
sub         esp,8 
fstp        qword ptr [esp]
</code></pre>
<p>Kennt da jemand einen Ausweg aus der Misere (außer, dass man double als Typ verwendet) ?</p>
<p>danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1325236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1325236</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Sat, 14 Jul 2007 11:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Mon, 16 Jul 2007 06:28:09 GMT]]></title><description><![CDATA[<p>ERstens braucht eine var-arg Funktion mindestens einen festen Parameter, der als Orientierungspunkt für va_start() verwendet werden kann. Und zweitens führt C++ auf den variablen Argumenten noch &quot;numeric promotion&quot; durch - alle float-Werte werden nach double konvertiert, char und short nach int (das bedeutet, daß es wenig Sinn macht, float, char oder short aus der Argumentliste ziehen zu wollen).</p>
<p>PS: Wozu brauchst du überhaupt die variable Argumentliste, wenn du doch nur einen Wert erwartest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1326259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1326259</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 16 Jul 2007 06:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 11:57:31 GMT]]></title><description><![CDATA[<p>Ich schreibe an einer Klasse, die einen Funktionszeiger repräsentieren soll. Dabei soll es egal sein, ob er auf eine normale Funktion oder auf eine Memberfunktion zeigt.</p>
<p>Ich habe jetzt schon entsprechende Funktionen (in asm) geschrieben, die Adressen von Funktionen auslesen, bzw. sie analysieren.</p>
<p>Zur Zeit arbeite ich eben an der Anbindung des ASM-Codes an C++. Am liebsten währe mir da eine Funktion call() gewesen die irgendwelche Params übernimmt (deshalb das ...) und diese 1zu1 der funktion übergibt, die aufgerufen wird. Wenn diese Funktion aber float erwartet schlägt das alles fehl, da sie double geliefert bekommt.</p>
<p>Ich werde das alles jetzt so lösen, dass man vorher angeben muss, welche Parameter die Funktion erwartet und dann passe ich das eben entsprechend an. Das ist zwar sicherer, aber eben auch langsamer.</p>
<p>PS: man muss nicht unbedingt, die Anzahl der Parameter übergeben, da man das auch über ASM auslesen kann (ob man da mal nen kurzen Artikel zu schreiben könnte?! wäre nämlich kein Problem ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327187</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Tue, 17 Jul 2007 11:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 12:01:57 GMT]]></title><description><![CDATA[<p>ESS_CB schrieb:</p>
<blockquote>
<p>PS: man muss nicht unbedingt, die Anzahl der Parameter übergeben, da man das auch über ASM auslesen kann (ob man da mal nen kurzen Artikel zu schreiben könnte?! wäre nämlich kein Problem ;))</p>
</blockquote>
<p>Durchaus möglich, daß du auf ASM-Ebene da etwas drehen kannst (aber wie das aussehen könnte, hängt von deinem System ab), auf C(++)-Ebene mußt du <em>wissen</em>, was für Parameter (Anzahl und Typ) du übergeben bekommen hast.</p>
<p>PS: Wegen dem Artikel kannst du ja bei <a href="mailto:redaktion@c-plusplus.net" rel="nofollow">redaktion@c-plusplus.net</a> anfragen, ob Interesse besteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327192</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 17 Jul 2007 12:01:57 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 12:14:33 GMT]]></title><description><![CDATA[<p>ESS_CB schrieb:</p>
<blockquote>
<p>Ich schreibe an einer Klasse, die einen Funktionszeiger repräsentieren soll. Dabei soll es egal sein, ob er auf eine normale Funktion oder auf eine Memberfunktion zeigt.</p>
</blockquote>
<p>Wenn es nicht noch um weitere Spezialproblematiken geht: solche Umsetzungen gibt es ohne über ASM zu gehen (Thema: Funktoren). Siehe auch Modernes C++ Design von Alexander Andrescu...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327210</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 17 Jul 2007 12:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 12:38:22 GMT]]></title><description><![CDATA[<p>ehm, ich hab mir mal ganz kurz (!!) die Funktoren von Boost angeschaut und ich habe keine Möglichkeit gefunden, so ein Teil an eine Funktion eines bestimmten Objekts zu binden.<br />
Ich bräuchte nämlich einen Pointer, der direkt auf eine Funktion eines bestimmten Objekts zeigt und _NICHT_ auf einfach nur auf eine bestimmte Funktion der Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327230</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Tue, 17 Jul 2007 12:38:22 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 12:42:22 GMT]]></title><description><![CDATA[<p>Da hast du wahrscheinlich nicht lange/genau genug hingeschaut <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="😉"
    /> Sowas gibt es schon in der Standard-Bibliothek ( <code>bind1st(mem_fun(&amp;Typ::methode),objekt);</code> ) - die Boost-Variante sieht vermutlich ein Stück eleganter aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327239</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 17 Jul 2007 12:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 13:04:42 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>die Boost-Variante sieht vermutlich ein Stück eleganter aus.</p>
</blockquote>
<p>Vermutlich? Hast Du selbst sie noch nie benutzt?</p>
<p>Wäre dann:</p>
<pre><code class="language-cpp">bind( &amp;Typ::methode, objekt, _1 );
</code></pre>
<p>Der Vorteil ist, anders als die Standard-Binder funktioniert das auch mit Methoden mit mehr (oder weniger) als einem Parameter:</p>
<pre><code class="language-cpp">bind( &amp;Typ::methode, objekt, _1, _2, _3 );
</code></pre>
<p>Mischen geht natürlich auch:</p>
<pre><code class="language-cpp">bind( &amp;Typ::methode, _1, param1, _2, _3, param4 );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1327246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327246</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 17 Jul 2007 13:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 13:06:26 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>die Boost-Variante sieht vermutlich ein Stück eleganter aus.</p>
</blockquote>
<p>Vermutlich? Hast Du selbst sie noch nie benutzt?</p>
</blockquote>
<p>Ja, leider. Ich kenne zwar Boost, aber ich komme nicht oft dazu, es selber einzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327248</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 17 Jul 2007 13:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to einen float-Wert auslesen, der einer Funktion mit variabler Parameterliste übergeben wurde on Tue, 17 Jul 2007 14:34:23 GMT]]></title><description><![CDATA[<p>verdammt schick, das ding, muss man mal sagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>ok, danke, ich glaub die Arbeit kann ich mir jetzt sparen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1327296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327296</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Tue, 17 Jul 2007 14:34:23 GMT</pubDate></item></channel></rss>