Appelez un void * en tant que fonction sans déclarer de pointeur de fonction
J'ai cherché mais impossible de trouver des résultats (ma terminologie est peut-être éteint), donc pardonnez-moi si cela a été demandé avant.
Je me demandais si il existe un moyen facile d'appeler un void*
comme une fonction en C sans d'abord déclarer un pointeur de fonction et en l'affectant le pointeur de la fonction de l'adresse;
ie. en supposant que la fonction à appeler est le type de void(void)
void *ptr;
ptr = <some address>;
((void*())ptr)(); /* call ptr as function here */
avec le code ci-dessus, j'obtiens erreur C2066: fonte de type de fonction est illégal dans VC2008
Si cela est possible, quelle serait la syntaxe diffère pour les fonctions avec des types de retour et des paramètres multiples?
source d'informationauteur jay.lee
Vous devez vous connecter pour publier un commentaire.
Votre plâtre doivent être:
En général, cela peut être rendu plus simple par la création d'un
typedef
pour la fonction type de pointeur:Je dois toutefois souligner que la conversion d'un ordinaire pointeur (pointeur vers l'objet), ou à partir d'un pointeur de fonction n'est pas strictement juridique dans la norme C (même si c'est une extension commune).
Je obtenir terriblement confus lors de la conversion de types de fonction. Il est plus facile et plus lisible pour typedef le pointeur de fonction type:
En C++:
reinterpret_cast< void(*)() > (ptr) ()
L'utilisation de
reinterpret_cast
vous permet d'économiser un ensemble de confusion entre parenthèses, et le< >
clairement définit le type en dehors de l'appel lui-même.