PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wofür extern "c" ?


Gast
2007-12-22, 19:29:52
Wofür braucht man in C++ eigentlich dieses "extern "c"" um C Funktionen benutzen zu können?
Ich meine was genau soll da schlimmes passieren wenn man das weg lässt?

SGT.Hawk
2007-12-22, 21:17:40
Hm, ich schlage vor, du holst essentiell C in einem guten Buch nach!
Extern benutzt man dann, wenn man Daten oder Funktionen modulübergreifend benutzen möchte, dann MUSST du extern benutzen, ansonsten wird dir das Compiler schon sagen.

Marscel
2007-12-22, 21:21:09
Das merkst du spätestens dann, wenn du mit C++-Compiler eine Library erstellst, dann ist der Prozedurenname decorated und andere Programme (per C-Compiler erstellt) meckern dann, dass sie die Punkte nicht finden können, weil sie die undecorated verlangen. Mit 'extern "C"' kann man das bei C++-Compilern vermeiden.

Korrigiert mich, wenn ich falsch bin, aber soweit ich mich erinnere, war das so.

Gast
2007-12-22, 21:38:31
Hm, ich schlage vor, du holst essentiell C in einem guten Buch nach!
Extern benutzt man dann, wenn man Daten oder Funktionen modulübergreifend benutzen möchte, dann MUSST du extern benutzen, ansonsten wird dir das Compiler schon sagen.
Ich glaub du hast nicht verstanden worum es geht. Es geht mir nicht um das Schlüsselwort extern in verbindung mit methoden oder variablen, sondern um extern "c", was man in c++ oft benutzt.

Das merkst du spätestens dann, wenn du mit C++-Compiler eine Library erstellst, dann ist der Prozedurenname decorated und andere Programme (per C-Compiler erstellt) meckern dann, dass sie die Punkte nicht finden können, weil sie die undecorated verlangen. Mit 'extern "C"' kann man das bei C++-Compilern vermeiden.

Korrigiert mich, wenn ich falsch bin, aber soweit ich mich erinnere, war das so.
Was bedeutet decorated?

Trap
2007-12-22, 21:58:34
http://en.wikipedia.org/wiki/Name_mangling

SGT.Hawk
2007-12-22, 22:10:57
hehe, habe mich schon gewundert.....

Gast
2007-12-22, 22:39:15
http://en.wikipedia.org/wiki/Name_mangling
Danke für den Link :).

Frage geklärt.