Parameter?
-
Hallo was versteht man unter einem solchen Paramete:
void fkt (int (*func)())
Danke
-
Da wird ein Funktionszeiger übergeben
-
stimmt :/, wie oft kommt sowas eig. bei normalen Programmen vor?
-
Ab- bzw. eingekapselt sehr sehr oft.
Guck dir mal die STL an (im speziellen <algorithm>), da werden überall Funktoren, Funktionszeiger und sowas benutzt.
-
Vielen Dank!
Dann nochmal etwas cryptisches was soll man darunter verstehen:
void fkt( int var, (int (*fkt)()); #define fkt_2 (a) \ fkt (a, (int (*)())NULL)
-
void fkt( int var, (int (*fkt)());
Eine Funktion fkt, die zwei Parameter hat: erster Parameter ist ein int und der zweite Parameter ist ein Funktionzeiger auf eine Funktion, die einen int zurückgibt und keine Parameter hat.
#define fkt_2 (a) \ fkt (a, (int (*)())NULL)
ein #define das ein Alias unter dem Namen fkt_2 erzeugt welches ein Parameter übergibt (muss hier in ein int kopierbar sein))
(int (*)())NULL
ist ein Cast eines Nullwertes auf die Signatur des Funktionszeigers
-
Also ich verstehe das es eine Makrodefinition ist und beim aufrufen der fkt2 dann im Hintergrund der Parameter
(int (*)())NULL
übergeben wird. Nur was was ist das für ein Parameter?
-
^ Vielen dank hatte die obere antwort schon abgeschickt bevor ich die Antwort gelesen habe!
Danke!
-
Naja ein Problem kommt selten allein, was versteckt sich unter nachfolgender Fehlermeldung?
argument of type "I32 (*)()" is incompatible with parameter of type "I32 (*)() C"
-
Sachmal : denkst Du nicht, das die Höflichkeit es gebietet, in einem Thread bei einem Nick zu bleiben?
-
^ Ja
jedenfalls ich habe das Gefühl das es irgendwas mit lib in C rest in C++ zutun hat.
-
joa wie ichs gedacht habe Problem gefunden:
Differences between C and C++ linkage and calling conventions can also have subtle implications for code that uses function pointers. Some compilers will produce non-working code if a function pointer declared extern "C" points to a C++ function that is not declared extern "C"
-
Und wie kriege ich jetzt hin mein gecastetes NULL auf (I32 (*)()) als extern "C" zu deklarieren?
-
Also was ich suche ist ein Funktionszeiger der auf NULL zeigt der jedoch von einer Funktion kommt die als extern "C" deklariert wurde.
Danke Gruß
-
Problem gelöst:
extern "C" { typedef int(*empty_fp)(); } ... function_call(...,(empty_fp)NULL);