<?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[Kann mir jemand folgendes genauer erklären?]]></title><description><![CDATA[<pre><code class="language-cpp">#ifdef __cplusplus
extern &quot;C&quot; { // was bedeutet diese zeile denn überhaupt?
#endif
</code></pre>
<p>versteht es nicht! kann mir das jemand erlären, was man damit erreichen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133424/kann-mir-jemand-folgendes-genauer-erklären</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 22:39:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133424.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jan 2006 17:27:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann mir jemand folgendes genauer erklären? on Tue, 17 Jan 2006 17:27:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifdef __cplusplus
extern &quot;C&quot; { // was bedeutet diese zeile denn überhaupt?
#endif
</code></pre>
<p>versteht es nicht! kann mir das jemand erlären, was man damit erreichen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969140</guid><dc:creator><![CDATA[JnZn558]]></dc:creator><pubDate>Tue, 17 Jan 2006 17:27:04 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand folgendes genauer erklären? on Tue, 17 Jan 2006 17:34:12 GMT]]></title><description><![CDATA[<p>Das bedeutet, dass in diesem Bereich (extern &quot;C&quot; { ... }) die C-Regeln für das Linken gelten. AFAIK ist das notwendig, wenn du C-Libs, die von einem C-Compiler kompiliert wurden in deinen Programmen verwendest, da sich die finalen Namen in C und C++ unterscheiden (bei letzterem gehört meist auch die Signatur und der Namespace zum Namen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969151</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 17 Jan 2006 17:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand folgendes genauer erklären? on Wed, 18 Jan 2006 00:05:42 GMT]]></title><description><![CDATA[<p>Ich versuch mich auch mal mit einer erklärung:</p>
<p>wenn der c-compiler eine funktion, sagen wir mal:</p>
<pre><code class="language-cpp">int funktion(int);
</code></pre>
<p>compiliert, dann erzeugt er maschinencode für die funktion und speichert ihn in der objektdatei unter dem namen der funktion. wenn der compiler dann irgendwo einen aufruf für eine funktion findet, dann sucht er in den objektdateien/libs, die er in der befehlszeile bekommen hat nach einem eintrag des funktionsnamens und setzt den code ein (ist jetzt natürlich *grob* vereinfacht dargestellt).</p>
<p>bei c++ gibts mit diesem system aber ein problem: in c++ kann man nämlich verschiedene funktionen des selben namens definieren:</p>
<pre><code class="language-cpp">int funktion(int);
int funktion(double);
</code></pre>
<p>die würdrn dann beide unter dem selben namen in der objektdatei stehen. bei einem aufruf einer dieser funktionen wüsste der compiler dann nicht welche er nehmen soll.</p>
<p>deshalb erzeugt der c++-compiler für jede funktion intern einen kryptischen funktionsnamen, der auch informationen über die parametertypen enthält. damit werden die namen der funktionen wieder eindeutig:</p>
<pre><code class="language-cpp">funktion@@YAHH@Z
funktion@@YAHN@Z
</code></pre>
<p>nun gibts aber wieder ein problem: wurde die funktion mit einen c-compiler compiliert und soll mit einem c++-programm gelinkt werden, dann klapps wieder nicht. denn der c-compiler hat die funktion unter dem namen &quot;funktion&quot; gespeichert, der c++-compiler sucht sie aber unter dem namen &quot;funktion@@YAHH@Z&quot;. un das gibt einen linker-fehler.</p>
<p>deshalb gibt es</p>
<pre><code class="language-cpp">extern &quot;C&quot;
{
  // c-funktions-prototypen
}
</code></pre>
<p>dies weist den c++-compiler an, für alle funktionen, deren prototypen innerhalb von extern &quot;C&quot; stehen, die c-namenskonvention zu verwenden anstelle der sonst in c++ üblichen kryptischen namen. damit kann man dann mit einem c-compiler compilierte funktionen mit einem c++-programm linken.</p>
<p>alle ansi-c-standardfunktionen, die es auch in c++ gibt, wie printf(), strcpy() etc sind in den headern inerhalb eines extern &quot;C&quot; deklariert.</p>
<p>das</p>
<pre><code class="language-cpp">#ifndef __cplusplus
#endif
</code></pre>
<p>drumrum braucht es, weil die selben header-dateien auf von c-compilern verwendet werden und c kennt extern &quot;C&quot; nicht. c++-compiler definieren immer das macro __cplusplus. das ist mw standard.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969411</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Wed, 18 Jan 2006 00:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to Kann mir jemand folgendes genauer erklären? on Wed, 18 Jan 2006 08:00:19 GMT]]></title><description><![CDATA[<p>Man erreicht damit auch, dass sich auf der Seite der C++ Programmierer ein Schlendrian einschleicht, da sie C Header nicht mehr innerhalb von 'extern &quot;C&quot;' sondern direkt einbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969464</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Wed, 18 Jan 2006 08:00:19 GMT</pubDate></item></channel></rss>