c code in c++, wrapper

Gast #6750301
Lesenswert?
• ▲
▼
Wen c code in c++ verwendet werden soll wird extern "c" benutzt. Den 
ganzen zusammenhang zwischen den unteren FUnktionen verstehe ich nicht 
ganz.
Wie genau hängen die Funktionen zusammen?

1
status startSensor()
2
    {
3
        // some code
4
        return SUCCESS;
5
    }
6

7
// exportetd function
8
extern "c" {
9
status plugin_start(pluginHdl sensor)
10
{
11
// some code
12
    return Context->startSensor();
13
}
14

15
status sensorPlugin_getFunctionTable(sensorPluginFunctionTable* functions)
16
{
17
    functions->common.start         = sensorPlugin_start; //was genau passiert hier?
18
}
19
}// extern "c"
#6752579
Lesenswert?
• ▲
▼
cwrapper schrieb:
> status sensorPlugin_getFunctionTable(sensorPluginFunctionTable*
> functions)
> {
>     functions->common.start         = sensorPlugin_start; //was genau
> passiert hier?
> }

So, wie es da steht, sollte es eine Fehlermeldung wegen "undefined 
symbol" geben. Könnte mir aber vorstellen, dass Du da eine 
copy-n-paste-Fehler eingebaut hast.

Ansonsten verhindert das extern "C" das sog. name-mangling. 
Funktionsnamen können vom C++-Compiler wegen Funktionsüberladung nicht 
direkt in den Assemblertext übernommen werden, sondern werden ergänzt 
mit einer Zeichenkette, die sich aus der Parameterliste zusammensetzt. 
Dies unterdrückt extern "C", damit eine C-Funktion auch aus einem 
C++-Kontext heraus aufgerufen werden kann.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.