Funktionspointer

Gast #543448
Lesenswert?
• ▲
▼
Hallo,

ich möchte folgende Funktion aufrufen:
1
void XUartLite_SetRecvHandler(XUartLite *InstancePtr, XUartLite_Handler FuncPtr, void *CallBackRef);

Das ist mein Programm:
1
XUartLite_Handler RecvCallback(void); //Prototyp
2

3

4
int main (void) {
5
[...]
6

7
XUartLite UartLite;
8
void* CallBackRef;
9
XUartLite_Handler (*Callback)(void);
10
Callback=RecvCallback;
11
XUartLite_SetRecvHandler (&UartLite, *Callback, CallBackRef); 
12

13
[...]
14
}

Es kommt die Warnung:

warning: passing arg 2 of `XUartLite_SetRecvHandler' from incompatible 
pointer type

Wo ist mein Fehler?

Das hab ich noch in der betreffenden Header-Datei gefunden:
1
typedef void (*XUartLite_Handler)(void *CallBackRef, unsigned int ByteCount);

  
#543464
Lesenswert?
• ▲
▼
TechInfo wrote:

> void* CallBackRef;
> XUartLite_Handler (*Callback)(void);

Ein XUartLiteHandler ist bereits ein Funktionspointer.
Daher denke ich, dass es heissen müsste:

  XUartLite_Handler Callback;

So wie du das jetzt hast, definierst du Callback
als Pointer auf eine Funktion, die keine Argumente liefert
und einen XUartLite_Handler zurückliefert.

> Callback=RecvCallback;
> XUartLite_SetRecvHandler (&UartLite, *Callback, CallBackRef);
>

Dein Code Schnipsel ist sehr kurz, sodass ich die
Absicht dahinter nicht zweifelsfrei erkennen kann.

> warning: passing arg 2 of `XUartLite_SetRecvHandler' from incompatible
> pointer type

Ja. das ist klar.
XUartLite_SetRecvHandler möchte einen Pointer auf eine
XUartLite_Handler Funktion. Du gibst ihr aber einen Pointer
auf eine Funktion die so einen XUartLite_Handler liefern könnte.

Den * in
XUartLite_SetRecvHandler (&UartLite, *Callback, CallBackRef);
wird der Compiler wohl ignorieren, da er hier keinen Sinn
ergibt. Einen Funktionspointer kann man so nicht dereferenzieren.
Das könnte man nur, indem man die Funktion tatsächlich aufruft.

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.