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.
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
estarr[42]
Un tableau de 42 éléments qui sont*arr[42]
Pointe vers(*arr[42])()
Fonctions qui ne prennent aucun argument etint *(*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é.