Warum benötigen Sie „extern C“ für C++-Rückrufe auf C-Funktionen?C++

Programme in C++. Entwicklerforum
Anonymous
 Warum benötigen Sie „extern C“ für C++-Rückrufe auf C-Funktionen?

Post by Anonymous »

Solche Beispiele finde ich im Boost-Code.

Code: Select all

namespace boost {
namespace {
extern "C" void *thread_proxy(void *f)
{
....
}

} // anonymous
void thread::thread_start(...)
{
...
pthread_create(something,0,&thread_proxy,something_else);
...
}
} // boost
Warum brauchen Sie eigentlich dieses externe „C“?
Es ist klar, dass die thread_proxy-Funktion privat intern ist, und ich erwarte nicht, dass sie als „thread_proxy“ entstellt wird, weil ich sie eigentlich überhaupt nicht entstellt brauche.
Tatsächlich habe ich in meinem gesamten Code, den ich geschrieben habe und der auf vielen Plattformen läuft, nie extern verwendet "C" und das hat wie gewohnt mit normalen Funktionen funktioniert.
Warum wird externes "C" hinzugefügt?

Mein Problem ist, dass externe "C"-Funktionen den globalen Namensraum verschmutzen und nicht wirklich versteckt sind, wie der Autor erwartet.
Ich spreche nicht von Mangel und externer Verknüpfung. In diesem Code wird deutlich, dass externe Verknüpfungen unerwünscht sind!
Antwort: Die Aufrufkonventionen von C- und C++-Funktionen sind nicht unbedingt identisch, daher müssen Sie eine mit der C-Aufrufkonvention erstellen. Siehe 7.5 (Seite 4) des C++-Standards.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post