2009-12-18 5 views
0

quelle est la différence entre ces deux ci-dessous:pointeurs de fonction requête

typedef void (*my_destructor)(void *); 

typedef void (*my_destructor)(void *) my_func_ptr; 

est le second valide?

+2

Que dit votre compilateur lorsque vous le compilez? Que pensez-vous qu'il devrait faire? –

Répondre

7

Le premier déclare un type appelé my_destructor. Ce type est un pointeur vers une fonction prenant un paramètre de type void* et ne renvoyant rien.

Le second n'est pas valide, qu'essayez-vous de faire? Si vous voulez déclarer une variable de type my_destructor, vous devez faire ceci:

typedef void (*my_destructor)(void *); 
my_destructor my_func_ptr; 
+1

Ou juste 'void (* my_func_ptr) (void *);', si vous voulez déclarer une variable de ce type sans nommer le type. Mais vous devriez vraiment nommer les types de pointeur de fonction, parce que c'est beaucoup de tracas d'erreur pour continuer à les répéter dans leur intégralité. –

1

Vous déclarez un type pour une fonction de pointeur. Le premier est le bon, cela signifie que vous avez un type nommé my_destructor qui est un pointeur vers une fonction (*my_destructor) qui prend un pointeur vide (void *) sur les arguments et qui ne retourne rien (void).

Maintenant vous pouvez utiliser votre type comme s'il s'agissait d'un autre type comme par exemple char, long ou autre.

Questions connexes