Rufen Sie einen void* als eine Funktion ohne die Deklaration einer Funktion-Zeiger
Habe ich gesucht, aber konnte Sie nicht finden, alle Ergebnisse (in meiner Terminologie kann ausgeschaltet werden), so verzeihen Sie mir, wenn dies wurde gebeten vor.
Ich Frage mich, ob es eine einfache Möglichkeit zum aufrufen einer void*
als eine Funktion in C, ohne die erste Deklaration ein function-pointer und dann das zuweisen der Funktion Zeiger die Adresse;
ie. vorausgesetzt, die Funktion aufgerufen werden, ist Typ void(void)
void *ptr;
ptr = <some address>;
((void*())ptr)(); /* call ptr as function here */
mit dem oben aufgeführten code bekomme ich Fehler C2066: cast-Funktion geben ist illegal in VC2008
Wenn das möglich ist, wie würde der syntax unterscheiden sich die Funktionen mit Rückgabetypen und mehrere Parameter?
InformationsquelleAutor der Frage jay.lee | 2010-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Stimmen sollten sein:
Im Allgemeinen, dies kann gemacht werden einfacher, durch die Schaffung einer
typedef
für die Funktion Zeiger Typ:Ich sollte jedoch darauf hinweisen, dass das casting ein gewöhnlicher Zeiger (Zeiger auf Objekt) oder von einer Funktion Zeiger ist nicht unbedingt legal in standard-C - (es ist zwar eine gängige Erweiterung).
InformationsquelleAutor der Antwort jamesdlin
Bekomme ich schrecklich verwirrt, wenn casting-Funktion der Arten. Es ist einfacher und lesbarer zu typedef die Funktion Zeiger Typ:
InformationsquelleAutor der Antwort Marcelo Cantos
In C++:
reinterpret_cast< void(*)() > (ptr) ()
Den Einsatz von
reinterpret_cast
spart Ihnen eine Reihe von verwirrenden Klammern, und die< >
klar definiert die Art abgesehen von den sich selbst aufrufen.InformationsquelleAutor der Antwort MSalters