我怎样才能摆脱这个c警告?

时间:2011-05-19 05:28:05

标签: c syntax warnings

这里sock_client是一个套接字:

LaunchThread(proxy_handlereq, sock_client);    

static void LaunchThread(int (*func)(), void *parg)
{
#ifdef WINDOWS
    LPDWORD         tid;
    CreateThread(NULL, 0L, (void *)func, parg, 0L, &tid);
#else
    pthread_t               pth;
    pthread_create(&pth, NULL, func, parg);
#endif    
}

我收到以下警告:warning: cast to pointer from integer of different size

如何将其作为LaunchThread的第二个参数传递?

2 个答案:

答案 0 :(得分:1)

试试这个:

LaunchThread(proxy_handlereq, (void*)sock_client);

编辑:

好的,现在我看到:sock_client只是端口的整数。 你想把这个号码传递给另一个帖子,对吗?

(根据系统上的指针大小)你可以摆脱 这个肮脏的演员警告:

LaunchThread(proxy_handlereq, (void*)(0xFFFFFFFFFFFFFFFF & sock_client);

但实际上我建议你创建一个数据结构 所有要传递给其他线程的信息,例如:

struct MyData {
    int socket_no;
    const char* host_name;
    ...
};

然后创建一个这样的实例并将指向实例的指针传递给 你的LaunchThread函数。


EDIT2:

您可以在此问题中看到一些示例代码: Multiple arguments to function called by pthread_create()?

答案 1 :(得分:0)

如果sock_client是套接字,则需要将LaunchThread调用为:

LaunchThread(proxy_handlereq, &sock_client);

因为CreateThreadpthread_create都希望参数的指针传递给func()