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 vonthis
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.