web-dev-qa-db-fra.com

La fonction void * function () est-elle un pointeur sur la fonction ou une fonction renvoyant un void *?

Je suis confus quant à la signification de void *function().
Est-ce un pointeur vers une fonction ou une fonction renvoyant void*? Je l'ai toujours utilisé sur les structures de données comme une fonction récursive renvoyant un pointeur, mais quand j'ai vu un code en multithreading (pthread) il y a la même déclaration de fonction. Maintenant, je ne sais pas quelle est la différence entre eux.

26
user9515151

Les déclarations en C/C++ sont lues de l'identifiant vers l'extérieur suivant la priorité de l'opérateur .

Un rapide coup d'œil à le tableau de priorité des opérateurs C/C++ dans wikipedia révèle que l'opérateur d'appel de fonction () A une priorité plus élevée que l'opérateur d'indirection *. Ainsi, vos déclarations de fonction se lisent comme suit:

  • Commencez par l'identifiant: function is

  • function() une fonction qui ne prend aucun argument

  • void* function() et renvoie un void*.

Ce principe général s'applique également aux déclarations de tableau ([] A également une priorité plus élevée que *) Et aux combinaisons des deux. Alors

int *(*arr[42])();

est lu comme

  • arr est
  • arr[42] Un tableau de 42 éléments qui sont
  • *arr[42] Pointe vers
  • (*arr[42])() Fonctions qui ne prennent aucun argument et
  • int *(*arr[42])() retourne un int*.

Il faut un peu de temps pour s'y habituer, mais une fois que vous avez compris le principe, il est facile de lire ces déclarations sans ambiguïté.