<?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[C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... ));]]></title><description><![CDATA[<p>Hi,</p>
<p>ich denke das ist eine C++ Frage habe diese Art des Funktionsaufrufs in einem Windows Buch von Jeffrey Richter gesehen ( dort war es als #define... deklariert).</p>
<p>Hab's dann mal getestet um zu sehen ob man Funktionen so aufrufen kann...</p>
<pre><code class="language-cpp">void Add( int a, int b, int &amp;c )
{
   c = a + b ;
}
</code></pre>
<p>und dann der Aufruf...</p>
<pre><code class="language-cpp">int a = 12;
int b = 13;
int erg = 0;

( (Add) (a, b, erg) );

std::cout &lt;&lt; &quot;a+b:  &quot; &lt;&lt; erg &lt;&lt; std::endl;
</code></pre>
<p>Ich kann mich dunnkel daran erinnern, das ich sowas entfernt ähnliches bei Callbacks gesehen habe, aber sonst nicht.<br />
Wieso funktioniert das? Ich komme mit der Syntax in diesem Aufruf nicht klar.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302212/c-funktion-aufrufen-als-fn-arg1-arg2</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 10:12:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302212.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Apr 2012 13:45:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 13:46:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich denke das ist eine C++ Frage habe diese Art des Funktionsaufrufs in einem Windows Buch von Jeffrey Richter gesehen ( dort war es als #define... deklariert).</p>
<p>Hab's dann mal getestet um zu sehen ob man Funktionen so aufrufen kann...</p>
<pre><code class="language-cpp">void Add( int a, int b, int &amp;c )
{
   c = a + b ;
}
</code></pre>
<p>und dann der Aufruf...</p>
<pre><code class="language-cpp">int a = 12;
int b = 13;
int erg = 0;

( (Add) (a, b, erg) );

std::cout &lt;&lt; &quot;a+b:  &quot; &lt;&lt; erg &lt;&lt; std::endl;
</code></pre>
<p>Ich kann mich dunnkel daran erinnern, das ich sowas entfernt ähnliches bei Callbacks gesehen habe, aber sonst nicht.<br />
Wieso funktioniert das? Ich komme mit der Syntax in diesem Aufruf nicht klar.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201638</guid><dc:creator><![CDATA[FrankTheFox]]></dc:creator><pubDate>Fri, 13 Apr 2012 13:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 13:59:07 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">(Add) (2, 4, a);
</code></pre>
<p>So kann man es auch aufrufen. Da sich eine Funktion implizit in einen (Fkt.-)Pointer casten lässt, <strong>schätze</strong> ich mal, dass es keinen Unterschied macht, ob man jetzt die Klammern weg lässt oder nicht (der Ausdruck in den Klammern wird dann halt zuerst ausgewertet, und da verändert sich nix).<br />
Vielleicht optimiert der Compiler das ja auch (also aus <code>(5)</code> wird wahrscheinlich <code>5</code> , <code>(indentifier)</code> wird zu <code>indentifier</code> usw.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201645</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Apr 2012 13:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 13:59:10 GMT]]></title><description><![CDATA[<p>Hab grad mal etwas damit rumgespielt:</p>
<pre><code class="language-cpp">void foo( int, int ) {}
int main() {
    foo( 1, 2 ); // normaler Aufruf
    (foo) (1, 2); // nur Funktionsname umklammert
    ( foo( 1, 2 ) ); // nur Aufruf umklammert
    ( (foo) (1, 2) ); // beides umklammert
    (( (foo) (((1)), ((2))) )); // noch ein paar Klammern mehr ;)
}
</code></pre>
<p>Nette obfuscation. <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="😉"
    /><br />
Gleich kommt sicher jemand, der die passende Stelle aus dem Standard dazu zitiert. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201646</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Fri, 13 Apr 2012 13:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 14:05:27 GMT]]></title><description><![CDATA[<p>Meinst du die Klammerung, oder 4.3 (1) (aus <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf" rel="nofollow">dem hier</a>)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201647</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Apr 2012 14:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 14:10:59 GMT]]></title><description><![CDATA[<p>Da gibts nichts aus dem Standard zu zitieren. Man kann jeden Ausdruck beliebig mit Klammern einschachteln, natürlich auch Funktionsbezeichner. Naja vielleicht kann man die Grammatik zitieren, aber das bringt es wohl nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201650</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 13 Apr 2012 14:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 14:33:29 GMT]]></title><description><![CDATA[<p>&quot;785 Grammar summary A.3 Basic concepts&quot; vielleicht?</p>
<blockquote>
<p>A.4 Expressions [gram.expr]<br />
primary-expression:<br />
literal<br />
this<br />
<strong>( expression )</strong><br />
id-expression</p>
</blockquote>
<p>Definiert müsste es ja schon irgendwo sein, dass man es darf. Ansonsten könnte in irgendeiner anderen Sprache (a) ja auch ein 1-tuple mit a als einziges Element sein, das nicht implizit auch == a ist wie z.B in Python ( <a href="http://codepad.org/pNK5Dlqw" rel="nofollow">http://codepad.org/pNK5Dlqw</a> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201668</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Fri, 13 Apr 2012 14:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 14:40:54 GMT]]></title><description><![CDATA[<p>1-Tupel macht man in Python so:</p>
<pre><code>a = (1,)
</code></pre>
<p>Ansonsten stimmt das natürlich, das steht implizit in der Grammatik. Mein Punkt ist, dass es für Funktionen nicht gesondert aufgeführt ist. Dass man um arithmetische Ausdrücke Klammern setzen darf, darüber hat sich jedenfalls noch nie einer gewundert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201670</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 13 Apr 2012 14:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 14:43:21 GMT]]></title><description><![CDATA[<p>Ah, mit Komma, ok, thx. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201673</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Fri, 13 Apr 2012 14:43:21 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Funktion aufrufen als ( (fn) (arg1, arg2, ... )); on Fri, 13 Apr 2012 21:10:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ok! Danke also nur 'ne Klammerung. Wollte schon bei Jeffrey anrufen und das mal abklären.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201810</guid><dc:creator><![CDATA[FrankTheFox]]></dc:creator><pubDate>Fri, 13 Apr 2012 21:10:03 GMT</pubDate></item></channel></rss>