<?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 zu Inline-Funktionen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier folgende Funktion:</p>
<pre><code class="language-cpp">#include &lt;iostream.&gt;
using namespace std;

inline int Double(int);

int main()
{
    int target;

    cout &lt;&lt; &quot;Bitte eine Zahl eingeben: &quot;;
    cin &gt;&gt; target;
    cout &lt;&lt; &quot;\n&quot;;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;
    return 0;
}

int Double(int target)
{
    return 2*target;
}
</code></pre>
<p>Und ich sehe keinen Unterschied in der Arbeitsweise, wenn ich das inline weglasse.<br />
Wozu benötige ich es also ? Verstehe das nicht.<br />
Wäre für eine kurze Erklärung dankbar.</p>
<p>Gruß<br />
Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177059/frage-zu-inline-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 00:33:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177059.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Mar 2007 19:16:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:16:33 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe hier folgende Funktion:</p>
<pre><code class="language-cpp">#include &lt;iostream.&gt;
using namespace std;

inline int Double(int);

int main()
{
    int target;

    cout &lt;&lt; &quot;Bitte eine Zahl eingeben: &quot;;
    cin &gt;&gt; target;
    cout &lt;&lt; &quot;\n&quot;;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;

    target = Double(target);
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl;
    return 0;
}

int Double(int target)
{
    return 2*target;
}
</code></pre>
<p>Und ich sehe keinen Unterschied in der Arbeitsweise, wenn ich das inline weglasse.<br />
Wozu benötige ich es also ? Verstehe das nicht.<br />
Wäre für eine kurze Erklärung dankbar.</p>
<p>Gruß<br />
Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254130</guid><dc:creator><![CDATA[OlliBi]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:16:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:35:50 GMT]]></title><description><![CDATA[<p>Inline ist nur eine Empfehlung an den Compiler, wenn er (Compiler) das nicht macht dann halt nicht.<br />
In diesem Fall aber sowieso nicht weil es hier nichts zu expandieren gibt.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">const int a = 4;
int mult(int op) {
    return (2 * op)
}
x = mult(a);
</code></pre>
<p>Der Aufwand die Funktion aufzurufen ist relativ hoch, im Verhältnis gesehen zu dem was die Funktion macht.<br />
Wenn inline angewendet wird, könnte der Wert [x entspricht integer 8] doch auch direkt geschrieben werden.</p>
<p>Aber wie gesagt, das geht nicht immer, weil die Werte nicht immer vorher feststehen und der Compiler hat sowieso das letzte Wort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254143</guid><dc:creator><![CDATA[Hans_er]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:35:50 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:39:38 GMT]]></title><description><![CDATA[<p>...um das Beispiel mal etwas zu konkretisieren:</p>
<p><a href="http://www.cpp-tutor.de/cpp/le10/le10_02.htm" rel="nofollow">http://www.cpp-tutor.de/cpp/le10/le10_02.htm</a></p>
<p>MfG mikey.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254146</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:41:57 GMT]]></title><description><![CDATA[<p>Danke,</p>
<p>habe jetzt was ich brauche.</p>
<p>Gruß<br />
Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254148</guid><dc:creator><![CDATA[OlliBi]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:41:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:42:47 GMT]]></title><description><![CDATA[<blockquote>
<p>Und dazu gehört teilweise die eigenständige Definition einer Funktion als inline-Funktion wenn sie im gleichen Modul (CPP-Datei) verwendet wird.</p>
</blockquote>
<p>Ahja, habe ich mal gelesen bei meinem Compiler (gcc) --force-inline oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254149</guid><dc:creator><![CDATA[Hans_er]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:45:12 GMT]]></title><description><![CDATA[<p>Das bläht den Code bei vielen Funktionsaufrufen aber mächtig auf. Ach, so schlau wird der Compiler schon sein, dass er nicht stursinnig jede Funktion als inline deklariert !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254150</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:48:00 GMT]]></title><description><![CDATA[<p>Ja, in meinem Buch steht, für Funktionen die viel leisten macht das wenig Sinn weil die Binary grösser wird. Was allerdings VIEL bedeutet ....<br />
Ich schätze mal die Erkennung durch den Compiler ist so einfach auch nicht, kann man sich ja vorstellen auf was man alles achten muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254154</guid><dc:creator><![CDATA[Hans_er]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 19:49:28 GMT]]></title><description><![CDATA[<p>...ist sowieso unglaublich, wie leistungsfähig heutige Compiler sind. Ich glaub, ich zieh mir mal den Source vom gcc rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254155</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Tue, 27 Mar 2007 19:49:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 20:40:02 GMT]]></title><description><![CDATA[<p>&quot;inline&quot; ist nicht nur ein Tip an den Compiler, sondern erlaubt auch u.A. die Definition einer Funktion in verschiedenen TUs zu wiederholen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254201</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Mar 2007 20:40:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 22:18:20 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>...sondern erlaubt auch u.A. die Definition einer Funktion in verschiedenen TUs zu wiederholen.</p>
</blockquote>
<p>das war 'static'<br />
<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/1254224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254224</guid><dc:creator><![CDATA[vista]]></dc:creator><pubDate>Tue, 27 Mar 2007 22:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Tue, 27 Mar 2007 23:32:34 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>...sondern erlaubt auch u.A. die Definition einer Funktion in verschiedenen TUs zu wiederholen.</p>
</blockquote>
<p>das war 'static'<br />
<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>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Nein, meine ich nicht, ich meine <em>inline</em>.<br />
-&gt; I N L I N E &lt;-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254233</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 27 Mar 2007 23:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Wed, 28 Mar 2007 16:02:40 GMT]]></title><description><![CDATA[<p>vista schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>...sondern erlaubt auch u.A. die Definition einer Funktion in verschiedenen TUs zu wiederholen.</p>
</blockquote>
<p>das war 'static'<br />
<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>
</blockquote>
<p>Mit static forcierst du internal linkage, d.h. definierst du eine solche Funktion in mehreren ÜEs, erhälst du *mehrere* unterschiedliche Funktionen (eine pro ÜE). Inline-Funktionen haben, sofern nicht durch ein zusätzliches static ergänzt, external linkage, sie müssen zwar in jeder ÜE, in der sie aufgerufen werden, auch definiert sein, die Definitionen müssen aber tokenweise identisch sein und ergeben am Ende genau eine Definition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254785</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 28 Mar 2007 16:02:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Thu, 29 Mar 2007 13:07:12 GMT]]></title><description><![CDATA[<p>Außerdem muß die inline-Funktion VOR dem Aufruf definiert sein, also</p>
<pre><code class="language-cpp">inline int Double(int target) 
{ 
    return 2*target; 
}

int main() 
{ 
    int target; 

    cout &lt;&lt; &quot;Bitte eine Zahl eingeben: &quot;; 
    cin &gt;&gt; target; 
    cout &lt;&lt; &quot;\n&quot;; 

    target = Double(target); 
    cout &lt;&lt; &quot;Target: &quot; &lt;&lt; target &lt;&lt; endl; 

    return 0; 
}
</code></pre>
<p>Denn wie soll er sonst den Code inlinen, wenn er die Definition nicht kennt?!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255325</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 29 Mar 2007 13:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Thu, 29 Mar 2007 16:12:24 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>vista schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>...sondern erlaubt auch u.A. die Definition einer Funktion in verschiedenen TUs zu wiederholen.</p>
</blockquote>
<p>das war 'static'<br />
<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>
</blockquote>
<p>Mit static forcierst du internal linkage, d.h. definierst du eine solche Funktion in mehreren ÜEs, erhälst du *mehrere* unterschiedliche Funktionen (eine pro ÜE). Inline-Funktionen haben, sofern nicht durch ein zusätzliches static ergänzt, external linkage, sie müssen zwar in jeder ÜE, in der sie aufgerufen werden, auch definiert sein, die Definitionen müssen aber tokenweise identisch sein und ergeben am Ende genau eine Definition.</p>
</blockquote>
<p>Das was er meint, ist vielleicht das Phänomen, das in Effektiv C++ beschrieben wird: wenn eine Funktion, die als inline vom Anwender deklariert wurde, aber nicht vom Compiler inline umgesetzt wird, wurde früher diese Funktion als static umdeklariert. Das wurde gemacht, damit es keine Konflikte beim zusammenlinken von ÜE gibt, wenn diese jeweils den gleichen Header eingebunden hatten. Das ist ... *blätter* ... Kapitel 33 in der 3. Auflage von Effektiv C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255493</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 29 Mar 2007 16:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Fri, 30 Mar 2007 09:48:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8183">@viande</a><br />
Nein, ich denke du irrst und hustbaer bezieht sich eindeutig auf die ODR-Auswirkungen die inline hat. inline ändert die &quot;once per program&quot;-Eigenschaft, die &quot;normale&quot; Funktionen haben, in eine &quot;once per translation unit&quot;-Eigenschaft und das hat überhaupt gar nichts mit static zu tun.</p>
<blockquote>
<p>Das was er meint, ist vielleicht das Phänomen, das in Effektiv C++ beschrieben wird: wenn eine Funktion, die als inline vom Anwender deklariert wurde, aber nicht vom Compiler inline umgesetzt wird, wurde früher diese Funktion als static umdeklariert. Das wurde gemacht, damit es keine Konflikte beim zusammenlinken von ÜE gibt, wenn diese jeweils den gleichen Header eingebunden hatten.</p>
</blockquote>
<p>Richtig. In Prä-Standard-C++ Zeiten hatten inline-Funktionen internal linkage.<br />
Diese Zeiten sind aber nun mittlerweile gut 10 Jahre her. Problematisch waren von je her so Sachen wie statische Variablen in inline-Funktionen. Solange eine inline-Funktion internal linkage hat, muss der Linker hier nichts besonderes machen - jede ÜE erhält ihre eigene Version. external linkage zwingt den Linker hingegen dazu, dafür zu sorgen, dass es am Ende nur genau eine Version gibt.</p>
<p>Aber das hat eigentlich nichts mit dem Thema zu tun - noch einmal inline und static sind orthogonal zueinander und in diesem Thema geht es um inline und in den letzten Beiträgen um die Auswirkungen dieses Schlüsselworts auf die One Definition Rule.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1255862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1255862</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 30 Mar 2007 09:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Inline-Funktionen on Fri, 30 Mar 2007 16:37:06 GMT]]></title><description><![CDATA[<p>jo. genau. <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/1256165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256165</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 30 Mar 2007 16:37:06 GMT</pubDate></item></channel></rss>