avertissement: distribution de pointeur d'entier de taille différente

Je suis en train de travailler sur la programmation socket.. mon code s'exécute de la façon dont je le veux, je suis en mesure de l'utiliser. MAIS il me donne un avertissement à la compilation.

Je compiler à l'aide de

gcc server1.c -o server1 -lpthread

Et je reçois un avertissement

warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

Cette erreur vient pour le code suivant

int newsockfd;
newsockfd = (int)newsockfdd; //this line

Et je suis en utilisant newsockfdd (qui est de type int) dans le bloc de code

if (pthread_create(&threadID[i++], NULL, serverThread, (void *)(intptr_t)newsockfdd) != 0)
    {
        perror("Thread create error");
    }

Comme vous pouvez sans doute dire, le code n'est pas écrit trop bien (je suis en train de faire mieux). Je sais que cet avertissement vient à cause de quelque chose à voir avec la taille d'un int. Mais vraiment, je ne sais pas comment le résoudre. Avant je l'ai mis dans (intptr_t) dans le pthread_create déclaration, il a été en montrant un avertissement sur cette ligne, mais que le temps de l'avertissement a été

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

Il semble qu'il devrait y avoir une solution simple à ce point? Mais je ne le trouve pas. Je suis sur Ubuntu 64 bits. Est qu'une des raisons de l'avertissement?

Hmm, compte tenu de l'avertissement que vous avez obtenu d' (void*)newsockfdd avant de vous interposés le casting de intptr_t, il semble peu probable que la cast from pointer to integer of different size avertissement est en fait à partir de la ligne indiquée.
À moins que... Est-ce que la ligne de serverThread et newsockfdd est l'argument que serverThread reçoit? Ensuite, il serait clair.
Oui.. je passe en argument à serverThread. Comme suit: void *serverThread(void *newsockfdd). Alors quel est le problème?
Ainsi, la fonction que vous êtes en cours d'exécution comme un pthread prend un void* comme argument. Si votre int est d'abord jeté à void* quand il est passé, puis dans serverThread, le void* est jeté en arrière pour int. C'est mauvais style, mauvais en sera probablement de travail. Mais, si possible, passer une pointeur pour newsockfdd et dans serverThread, cast le pointeur de int* et de déréférencement.

OriginalL'auteur user1825770 | 2012-11-25