大家好我没遇到这段代码
int file_id;
void* wraper(void* p){
return (void)reader((int)p);
}
int main(int argc, char *argv[]){
srandom ((unsigned) time(NULL));
int i;
pthread_t tid[3];
for(i=0;i<3;i++){
pthread_t * temp = malloc(sizeof(tid[i]));
file_id=get_random(NB_FILES);
pthread_create(&tid[i], NULL,wraper,(void*)file_id);
}
并且编译器正在给我这个
reader-thread.c: In function ‘wraper’:
reader-thread.c:59:25: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return (void)reader((int)p);
^
reader-thread.c:59:5: error: void value not ignored as it ought to be
return (void)reader((int)p);
^
reader-thread.c: In function ‘main’:
reader-thread.c:70:46: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
pthread_create(&tid[i], NULL,wraper,(void*)file_id);
^
目标是创建3个线程并将file_id发送给功能阅读器,我无法看到我做错了什么
答案 0 :(得分:1)
int
上没有相同的宽度。如果您真的需要,正确的类型是使用uintptr_t
或intptr_t
。(void)
,那么将函数的返回(你未向我们展示)转换为void*
是没有意义的。int
到void*
的相反方式几乎与1相同。实质上,您不应该尝试违反线程函数的调用接口。如果必须传输数据,请传递指向数据的指针。
此外,当您在此处发布问题时,请确保错误消息与您发布的代码相对应。