<?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[extern &amp;quot;C&amp;quot; vs _System ? calling convention ?]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weiß leider nicht, wohin das richtigerweise gehört ...<br />
Mein neuer Compiler (xlC/C++ V8.0 for AIX) moniert die Kombination von extern &quot;C&quot; und _System als &quot;conflicting linkages&quot; ...</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
   int _System f();
}

int main() {
   return f();
}
</code></pre>
<p>=&gt;</p>
<pre><code>&quot;main.cpp&quot;, line 2.16: 1540-1179 (S) &quot;extern &quot;C&quot; int _System f()&quot; contains conflicting linkages.
&quot;main.cpp&quot;, line 6.11: 1540-0274 (S) The name lookup for &quot;f&quot; did not find a declaration.
</code></pre>
<p>dem alten Compiler (V5.0.2) war das noch egal...<br />
Nervpunkt1: Nirgends in der Xlc-Doku oder der IBM-Homepage überhaupt finde ich _System beschrieben.</p>
<p>Nervpunkt2: Natürlich kann ich jetzt das _System einfach wegwerfen ... aber es ist eben der Header zu einer &quot;Fremdlib&quot; und da bin ich ein wenig unsicher, ob es nicht doch irgendeine Auswirkung hat. (besonders in Kombination, dass die lib aus nicht allzu vertrauenserweckender Hand kommt).</p>
<p>Weiß jemand, was _System unter AIX überhaupt bewirkt und warum sich das mit extern &quot;C&quot; beißen soll ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222688/extern-quot-c-quot-vs-_system-calling-convention</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 22:43:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222688.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Sep 2008 08:54:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 09:11:46 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weiß leider nicht, wohin das richtigerweise gehört ...<br />
Mein neuer Compiler (xlC/C++ V8.0 for AIX) moniert die Kombination von extern &quot;C&quot; und _System als &quot;conflicting linkages&quot; ...</p>
<pre><code class="language-cpp">extern &quot;C&quot; {
   int _System f();
}

int main() {
   return f();
}
</code></pre>
<p>=&gt;</p>
<pre><code>&quot;main.cpp&quot;, line 2.16: 1540-1179 (S) &quot;extern &quot;C&quot; int _System f()&quot; contains conflicting linkages.
&quot;main.cpp&quot;, line 6.11: 1540-0274 (S) The name lookup for &quot;f&quot; did not find a declaration.
</code></pre>
<p>dem alten Compiler (V5.0.2) war das noch egal...<br />
Nervpunkt1: Nirgends in der Xlc-Doku oder der IBM-Homepage überhaupt finde ich _System beschrieben.</p>
<p>Nervpunkt2: Natürlich kann ich jetzt das _System einfach wegwerfen ... aber es ist eben der Header zu einer &quot;Fremdlib&quot; und da bin ich ein wenig unsicher, ob es nicht doch irgendeine Auswirkung hat. (besonders in Kombination, dass die lib aus nicht allzu vertrauenserweckender Hand kommt).</p>
<p>Weiß jemand, was _System unter AIX überhaupt bewirkt und warum sich das mit extern &quot;C&quot; beißen soll ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582667</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Sep 2008 09:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 10:58:34 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Nervpunkt1: Nirgends in der Xlc-Doku oder der IBM-Homepage überhaupt finde ich _System beschrieben.</p>
</blockquote>
<p>Bezeichner mit führendem doppelten Unterstrich oder führendem einfachem Unterstrich und folgendem Großbuchstaben sind für den Compiler reserviert, siehe ISO 14882 § 17.4.3.1.2.</p>
<p>Bezeichner mit führendem Unterstrich sind im globalen Namensraum reserviert. In anderen Namensräumen darf man Unterstrich mit Kleinbuchstaben verwenden.</p>
<p>Tip: Bezeichner mit führendem Unterstrich(en) gar nicht verwenden.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Nervpunkt2: Natürlich kann ich jetzt das _System einfach wegwerfen ... aber es ist eben der Header zu einer &quot;Fremdlib&quot; und da bin ich ein wenig unsicher, ob es nicht doch irgendeine Auswirkung hat. (besonders in Kombination, dass die lib aus nicht allzu vertrauenserweckender Hand kommt).</p>
</blockquote>
<p>Bugreport an der Autoren der Lib, das <strong>muß</strong> behoben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582749</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Tue, 16 Sep 2008 10:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 10:57:22 GMT]]></title><description><![CDATA[<p>Ich würde eher das extern &quot;C&quot; weglassen als das _System. Der Compiler ist hoffentlich schlau genug zu wissen, wie er Systemfunktionen aufrufen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582765</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 16 Sep 2008 10:57:22 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 11:27:32 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Nervpunkt1: Nirgends in der Xlc-Doku oder der IBM-Homepage überhaupt finde ich _System beschrieben.</p>
</blockquote>
<p>Bezeichner mit führendem doppelten Unterstrich oder führendem einfachem Unterstrich und folgendem Großbuchstaben sind für den Compiler reserviert, siehe ISO 14882 § 17.4.3.1.2.</p>
<p>Bezeichner mit führendem Unterstrich sind im globalen Namensraum reserviert. In anderen Namensräumen darf man Unterstrich mit Kleinbuchstaben verwenden.</p>
<p>Tip: Bezeichner mit führendem Unterstrich(en) gar nicht verwenden.</p>
</blockquote>
<p>Dort steht nicht Compiler sondern Implementation. Hier geht es gerade um eine systemspezifische Erweiterung, wozu also der Hinweis? Man könnte höchtens monieren, dass dies evtl. in einem anderen Unterforum (etwa Compiler- und IDE) besser aufgehoben wäre.</p>
<p>@OP: Soweit ich das verstehe, impliziert _System sowohl eine eigene Aufrufkonvention als auch ein eigenes Namemangling-Schema. Damit wird extern &quot;C&quot; tatsächlich überflüssig. Darin unterscheidet sich die Situation etwa zu einer Deklaration (Windows) wie extern &quot;C&quot; int __stdcall f(), da hier __stdcall keinen Einfluss auf das Namemangling hat. Am besten also das extern &quot;C&quot; weglassen, evtl. kann auch so etwas wie extern &quot;SYSTEM&quot; int f() funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582782</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 16 Sep 2008 11:27:32 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 11:27:53 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Nervpunkt1: Nirgends in der Xlc-Doku oder der IBM-Homepage überhaupt finde ich _System beschrieben.</p>
</blockquote>
<p>Bezeichner mit führendem doppelten Unterstrich oder führendem einfachem Unterstrich und folgendem Großbuchstaben sind für den Compiler reserviert, siehe ISO 14882 § 17.4.3.1.2....</p>
</blockquote>
<p>Damit habe ich ja auch kein Problem - mehr damit, dass der Compilerhersteller nicht beschreibt, WAS er macht/wie er zu benutzen ist, aber Falschnutzung anmoniert...</p>
<p>~john schrieb:</p>
<blockquote>
<p>Tip: Bezeichner mit führendem Unterstrich(en) gar nicht verwenden....</p>
</blockquote>
<p>Ich glaube, es liegt hier ein Mißverständnis vor: Es geht hier nicht um eine &quot;zufällige Doppelnutzung&quot;, sondern darum, dass ein spezielles Compilerfeature genutzt werden soll (nämlich eine calling convention namens &quot;_System&quot;), was sich aber anscheinend in der neuesten Version mit extern &quot;C&quot; beißt.</p>
<p>~john schrieb:</p>
<blockquote>
<p>...Bugreport an der Autoren der Lib, das <strong>muß</strong> behoben werden.</p>
</blockquote>
<p>Tja, das sind Leute bei uns aus dem Haus, die nie Zeit (und leider nicht so gaaaanz viel Ahnung) haben... letztlich bin ich auf jeden Fall schneller damit, wenn ich selbst rausbekomme, ob sie diese calling convention in diesem speziellen Fall brauchen oder nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582785</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Sep 2008 11:27:53 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 12:01:07 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Ich würde eher das extern &quot;C&quot; weglassen als das _System. Der Compiler ist hoffentlich schlau genug zu wissen, wie er Systemfunktionen aufrufen soll.</p>
</blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>...Am besten also das extern &quot;C&quot; weglassen, ...</p>
</blockquote>
<p>Tja, das war auch mein erster Gedanke ... leider bekomme ich so trotzdem eine &quot;undefined symbols&quot;-Fehlermeldung vom Linker. Das Namemangeling wird anscheinend vom _System nicht unterdrückt.</p>
<p>camper schrieb:</p>
<blockquote>
<p>...evtl. kann auch so etwas wie extern &quot;SYSTEM&quot; int f() funktionieren. ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Also Compile und Link laufen so tadellos - leider ist diese convention auch nicht besser dokumentiert als _System (= überhaupt nicht). Ich weiß also leider nicht, ob Folgendes wirklich kompatibel ist:</p>
<pre><code class="language-cpp">// module.c
int _System f() { return 0; }
</code></pre>
<pre><code class="language-cpp">// main.cpp
extern &quot;SYSTEM&quot; {
   int f();
}

int main() { return f(); }
</code></pre>
<p>... und ob das eine Verbesserung ist ggü.:</p>
<pre><code class="language-cpp">// main.cpp
extern &quot;C&quot; {
   int f();
}
</code></pre>
<p>Immerhin erkennt der Compiler das &quot;SYSTEM&quot; (ein hier angefügtes &quot;SIMON2&quot; lieferte die lustige Warning:</p>
<pre><code>&quot;main.cpp&quot;, line 1.8: 1540-0523 (W) Linkage &quot;SIMON2&quot; is not known. extern &quot;C&quot; is assumed.
</code></pre>
<p>Mein Problem ist ja nicht nur, dass ich es irgendwie kompiliert und gelinkt haben will, sondern es sollte schon <em>richtig</em> passen - also auch bei längerer Laufzeit, Multithreading, ... (ist Teil eines Servers) garantiert das Richtige machen und keine Speicherlecks, zugriffsfehler, o.ä. produzieren ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582808</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Sep 2008 12:01:07 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 13:16:35 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ich glaube, es liegt hier ein Mißverständnis vor: Es geht hier nicht um eine &quot;zufällige Doppelnutzung&quot;, sondern darum, dass ein spezielles Compilerfeature genutzt werden soll (nämlich eine calling convention namens &quot;_System&quot;), was sich aber anscheinend in der neuesten Version mit extern &quot;C&quot; beißt.</p>
</blockquote>
<p>Nicht ohne Grund sind Bezeichner dieser Art für die Implementation reserviert. Wenn es keinen ganz triftigen Grund (Kernel Module, etc.) gibt, in der Implementation herumzuwurschteln, dann nimmt man insbesondere auf einem UNIX (naja AIX) nur extern &quot;C&quot;. Dir ist schon aufgefallen, daß das ganze von IBM gar nicht dokumentiert ist. Also, Finger weg davon, und ohne das probieren.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Tja, das sind Leute bei uns aus dem Haus, die nie Zeit (und leider nicht so gaaaanz viel Ahnung) haben...</p>
</blockquote>
<p>Wenn man irgend welche Compiler spezifischen Dinge nutzt, dann sollte man das wenigstens per bedingte Compilierung absichern und dokumentieren. Scheint nicht der Fall zu sein. Notfalls nachfragen was das soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582875</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Tue, 16 Sep 2008 13:16:35 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 13:42:19 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>...</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Tja, das sind Leute bei uns aus dem Haus, die nie Zeit (und leider nicht so gaaaanz viel Ahnung) haben...</p>
</blockquote>
<p>Wenn man irgend welche Compiler spezifischen Dinge nutzt, dann sollte man das wenigstens per bedingte Compilierung absichern und dokumentieren. Scheint nicht der Fall zu sein. ...</p>
</blockquote>
<p>Doch, das haben sie schon getan (über ein entsprechendes #ifdef) und offensichtlich sprechen sie da ja ein nutzbares Feature an - im Augenblick gehe ich nur davon aus, dass ich zu blöd bin, eine entsprechende Doku zu finden.<br />
Der Fall ist äquivalent zu _LINE_, _FILE_, ... auch compilerspezifisch und trotzdem darf man die nutzen - und die sind leider auch eher sparsam dokumentiert...</p>
<p>Also suche ich überall nach Infos ... eben auch hier. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1582888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1582888</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 16 Sep 2008 13:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to extern &amp;quot;C&amp;quot; vs _System ? calling convention ? on Tue, 16 Sep 2008 19:26:18 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Doch, das haben sie schon getan (über ein entsprechendes #ifdef) und offensichtlich sprechen sie da ja ein nutzbares Feature an - im Augenblick gehe ich nur davon aus, dass ich zu blöd bin, eine entsprechende Doku zu finden.</p>
</blockquote>
<p>&quot;offensichtlich&quot;? Das Symbol &quot;_System&quot; wird nicht in der ISO C noch C++ Norm definiert. Wenn es weder im C oder C++-Compilerhandbuch noch im Linker Handbuch auftaucht, dann stellt sich die Frage warum das überhaupt verwendet wurde. Möglicherweise findet sich etwas in der Compiler Doku zu dem alten Compiler.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Der Fall ist äquivalent zu _LINE_, _FILE_,</p>
</blockquote>
<p>Dem ist nicht so. Denn die Bedeutung von __LINE__, __FILE__ wird in der ISO C Norm definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1583095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1583095</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Tue, 16 Sep 2008 19:26:18 GMT</pubDate></item></channel></rss>