在开发多线程的时候,想在test函数中创建一个线程,并把参数传给handler这个函数,这个参数定义成了一个int型(4字节)
在编译时有丢失精度的报错,原因是64位机器中,指针占8字节;4字节int转换成8字节指针时,是从低精度转向高精度,此时不会报错,而在handler中,从高精度8字节的指针,转向低精度4字节的int时,损失了精度(有潜在的溢出可能性)就会报错。
见下表,在64位机器中long占8字节,只需将int换成long,就不会出现这个报错了。
报错的程序:
void test()
{
......
int clientfd = accept(listenfd, NULL, NULL);
......
pthread_create(&tid, NULL, handler, (int *)clientfd);
......
}
void *handler(void *fd)
{
......
int arg = (int)fd;//此处报错, error: cast from ‘void*’ to ‘int’ loses precision
......
}