Wofür ist dieser Code?



  • double function1( double (*f)( double))
    

    Dieses "double (f*)(double)" versteh ich nicht, was bewirkt das? Wird hier ein Pointer auf eine Funktion gesetzt?

    Gruß
    B.



  • Ja. Das Argument von function1 ist ein Funktionszeiger für Funktionen mit Rückgabe double und einem Parameter double.



  • Beckett schrieb:

    Wird hier ein Pointer auf eine Funktion gesetzt?

    Gruß
    B.

    BINGBINGBINGBINGBING!

    Richtige Antwort. Soviel zur allgemeinen Syntax:

    Rückgabetyp (Aufruftyp*Funktionszeigername)(Parametertyp,Parametertyp,...);
    

    In der Praxis:

    //Zeiger auf Funktionen, die nach der __cdecl-Konvention aufgerufen wird, 
    //keinen Parameter übernimmt und nix zurückgibt.
    void (__cdecl*Pointer_1)(void);
    
    //Zeiger auf Funktionen, die nach der __stccall-Konvention aufgerufen wird,
    //zwei int-Parameter übernimmt und einen int zurückgibt.
    int (__stdcall*Pointer_2)(int,int);
    
    //Zeiger auf Funktionen, die nach der __stdcall-Konvention aufgerufen wird,
    //einen int und einen Zeiger auf Funktionen, die nach der __fastcall-Konvention
    //aufgerufen wird, zwei int-Parameter übernimmt und nix zurückgibt, übernimmt,
    //und einen int zurückgibt.
    int (__stdcall*Pointer_3)(int,void(__fastcall*)(int,int))
    

    Nur das Beispiel, wo man einen Zeiger auf Funktionen als Rückgabetyp definieren will, kann ich nicht so leicht aus dem Ärmel schütteln.



  • Danke euch 🙂



  • Glühbirne schrieb:

    Soviel zur allgemeinen Syntax:

    Rückgabetyp (Aufruftyp*Funktionszeigername)(Parametertyp,Parametertyp,...);
    

    Was ist ein Aufruftyp? Kannst du ein portables Beispiel geben?



  • mngbd schrieb:

    Was ist ein Aufruftyp? Kannst du ein portables Beispiel geben?

    Aufruftyp ist mein Wort für Aufrufkonvention, und da gibt es einige:

    __cdecl beschreibt einen Funktionsaufruf wie standardmäßig in C.
    __stdcall ruft eine Funktion wie in Visual Basic oder Pascal auf.
    __fastcall ist compilerspezifisch und ist auf besonders schnelle Aufrufe festgelegt.
    __thiscall (unter C++) speichert (unter Visual Studio) die Adresse von this im ... was war das? ECX- oder EAX-Register? Weiß nicht mehr, ist schon ein bisschen her.

    Der Rest ist auf Wikipedia nachlesbar.



  • Portabel sind die alle nicht. Der Standard schweigt sich über calling conventions aus.


Anmelden zum Antworten