<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Inline-Ersetzung</id>
	<title>Inline-Ersetzung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Inline-Ersetzung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Inline-Ersetzung&amp;action=history"/>
	<updated>2026-06-05T07:34:01Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Inline-Ersetzung&amp;diff=23111&amp;oldid=prev</id>
		<title>imported&gt;Skranon am 23. September 2025 um 20:55 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Inline-Ersetzung&amp;diff=23111&amp;oldid=prev"/>
		<updated>2025-09-23T20:55:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Belege fehlen}}&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Inline-Ersetzung&amp;#039;&amp;#039;&amp;#039; ist eine Optimierungsmethode von [[Compiler]]n zur Steigerung der Ausführungsgeschwindigkeit eines [[Computerprogramm]]s. Dabei wird der Code der aufzurufenden [[Funktion (Programmierung)|Funktion]] an Stelle des Aufrufs kopiert. Das reduziert den Mehraufwand für den Aufruf (Sichern der [[Register (Computer)|Register]], Vorbereiten des [[Stapelspeicher|Stacks]]), verbessert die [[Lokalitätseigenschaft|Lokalität]] und weiterhin kann bei der [[Optimierer|Optimierung]] der Code beider Funktionen gemeinsam berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Folgender [[Quelltext]] in C …&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
inline int quadrat(int x) {&lt;br /&gt;
   return x*x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int c(int a, int b) {&lt;br /&gt;
   return quadrat(a) + quadrat(b);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
… kann von Compiler so übersetzt werden, dass nicht die Funktion aufgerufen, sondern die Funktionsdefinition direkt eingefügt wird. Dieses Verhalten ist optional, weiterhin kann es auch ohne Angabe des Schlüsselwortes inline durch die Kürze der Funktion quadrat(…) ausgelöst werden. Das Gleiche kann mit der simplen Funktion c() selbst auch passieren, d.&amp;amp;nbsp;h. auch diese kann geinlined werden.&lt;br /&gt;
&lt;br /&gt;
Weiterhin stellt das empfohlene Inlining keine Optimierung durch den Compiler, sondern eine durch den Programmierer dar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int c(int a, int b) {&lt;br /&gt;
   return a*a + b*b;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inline-Ersetzungen können in C teilweise die Funktion von [[Makro]]s übernehmen, bieten aber zusätzlich die Sicherheit einer [[statische Typisierung|statischen Typprüfung]] wie bei Funktionen. Da diese mittlerweile häufig unerwünscht ist (generische Programmierung), formuliert man seit C++98 üblicherweise so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
T quadrat(T x) {&lt;br /&gt;
   return x*x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;class T&amp;gt;&lt;br /&gt;
T c(T a, T b) {&lt;br /&gt;
   return quadrat(a) + quadrat(b);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie muss explizit deklariert werden und kann für von Klassen unabhängige, wie auch für [[Elementfunktion]]en (Methoden) verwendet werden. In den Interna des Compilers sind Makros und Inline-Ersetzungen jedoch nicht zu vergleichen.&lt;br /&gt;
&lt;br /&gt;
Es ist für den Compiler aber nicht für jede beliebig komplizierte Funktion möglich, die vom Programmierer gewünschte Ersetzung auch durchzuführen.  Die Funktion muss nicht kompliziert sein, um sie nicht ersetzen zu können. Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
inline double fact(int x) {&lt;br /&gt;
   return x &amp;gt; 1 ? x*fact(x-1) : 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Dann wird der normale Funktionsaufruf beibehalten. Vielmehr ist das inline im Beispiel als Empfehlung an den Compiler zu sehen, der er aber nicht nachgehen muss. Speziell in C++ gibt es für Ausnahmefälle auch Compiler-spezifische stärkere Varianten von inline (wie z.&amp;amp;nbsp;B. &amp;lt;code&amp;gt;__forceinline&amp;lt;/code&amp;gt;), deren Einsatz jedoch auf Kosten der [[Plattformunabhängigkeit|Portabilität]] gehen kann. Ohne solche Varianten wird das Inline-Attribut jedoch von den meisten modernen Compilern zumindest bei hohen Optimierungsleveln ignoriert.&lt;br /&gt;
&lt;br /&gt;
Manche Compiler können auch selbstständig für Inline-Ersetzung geeignete Funktionen in der Optimierungsphase identifizieren und ersetzen. In der Programmiersprache [[Eiffel (Programmiersprache)|Eiffel]] etwa ist nur diese automatische Inline-Ersetzung vorgesehen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:C++]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Skranon</name></author>
	</entry>
</feed>