2011-05-25 3 views
1

gcc version 4.3.3 sous Ubuntu Linux 9.04 dans le cas où cela est pertinent.C (gcc) warning: initialisation à partir du type de pointeur incompatible lors de l'appel de pthread_cleanup_push()

C'est le code incriminé:

pthread_cleanup_push(ctl_cleanup, NULL); 

avec ctl_cleanup() définie comme

void* ctl_cleanup(void *arg); 

Il y a d'autres cas où cet avertissement apparaît, dans des circonstances similaires. L'avertissement apparaît également si j'appelle quelque chose comme

pthread_cleanup_push(pthread_mutex_unlock, (void *)&m); 

où m est de type pthread_mutex_t. L'avertissement se lit comme suit:

avertissement: initialisation du type pointeur incompatible

Je ne comprends pas. J'ai passé d'autres choses en utilisant des pointeurs vides (par exemple, en passant des arguments à un pthread) sans cet avertissement. Est-ce que quelqu'un peut m'aider?

+0

Étant donné la solution de Seth, j'ai trouvé que la documentation de la bibliothèque GNU C contient une erreur sur pg. 437. Ils utilisent pthread_cleanup_push (pthread_mutex_unlock, (void *) &mut); alors qu'en fait vous devez convertir pthread_mutex_unlock en type (void *) qui a généré l'erreur ci-dessus – sfabel

Répondre

4
void ctl_cleanup(void *arg); 

Ce qui précède est le prototype que vous recherchez. Il renvoie void, pas un pointeur vers void.

L'extra * dans la fonction est parce qu'il prend un pointeur vers une fonction prenant un argument void * retournant void.

+0

Excellent. – sfabel

Questions connexes