소켓 프로그래밍에서 작업 중입니다. 코드가 원하는대로 실행되고, 사용할 수 있습니다. 그러나 편집에 대한 경고를 내게줍니다.경고 : 포인터를 다른 크기의 정수로 변환합니다.
나는
gcc server1.c -o server1 -lpthread
를 사용하여 컴파일 그리고 난 경고를 얻을
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
이 오류는 다음 코드
int newsockfd;
newsockfd = (int)newsockfdd; //this line
을 위해 제공 그리고는이 int이며 (newsockfdd를 사용하고 있습니다) 다음 코드 덩어리에
if (pthread_create(&threadID[i++], NULL, serverThread, (void *)(intptr_t)newsockfdd) != 0)
{
perror("Thread create error");
}
아마도 당신이 말할 수 있듯이, 코드는 너무 잘 작성되지 않았습니다. (나는 더 잘 만들고 있습니다). 이 경고는 int의 크기와 관련이 있기 때문에 발생한다는 것을 알고 있습니다. 그러나 나는 그것을 고치는 방법을 정말로 모른다. 내가는 pthread_create 문에 (intptr_t)를 넣어 전에, 그 라인에 경고를 표시했지만, 그 시간은 경고
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
했다이에 대한 간단한 수정이 있어야한다 것 같다? 그러나 나는 그것을 발견 할 수 없다. 우분투 64 비트를 사용하고 있습니다. 그것이 경고의 이유입니까? 주석에 확립 된 바와 같이
는
흠. 캐스트를 'intptr_t'에 삽입하기 전에'(void *) newsockfdd'에서 얻은 경고를 감안할 때, '다른 크기의 정수로 포인터에서 캐스트'경고가 실제로 표시된 줄에서 오는 것 같지 않습니다 . –
... 'serverThread'와'newsockfdd'의 줄은'serverThread'가받는 인수입니까? 그러면 그것은 분명합니다. –
@DanielFischer 예 .. serverThread에 인수로 전달합니다. 이렇게 : void * serverThread (void * newsockfdd). 그래서 무엇이 잘못 되었습니까? – user1825770