error: cannot convert to a pointer type 399 | ret = pthread_create(&pid, NULL, (void*)wait_irq, (void*)args);
时间: 2024-04-26 07:24:39 浏览: 10
这个错误的原因是在调用 pthread_create 函数时,第三个参数 (void*)wait_irq 要求是一个指向函数的指针,但是你传递的是一个函数名。正确的做法是在函数名前面加上取地址符号 &,也就是把 (void*)wait_irq 改为 (void*)&wait_irq。这样就能将 wait_irq 函数的地址作为参数传递给 pthread_create 函数了。
相关问题
warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [-Wincompatible-pointer-types] 389 | ret = pthread_create(&pid, NULL, &wait_irq, (void*)&args); | ^~~~~~~~~ | | | void * (*)(struct thread_args *)
这个警告通常是因为你传递给pthread_create函数的第三个参数的类型与函数指针的类型不匹配。pthread_create函数的第三个参数应该是一个指向函数的指针,该函数接受一个void指针参数并返回一个void指针,而你传递给它的参数类型与此不匹配。
你可以检查一下wait_irq函数的声明和定义,确保它的类型是正确的。如果wait_irq函数的定义与声明不匹配,你可以修改它们来匹配pthread_create函数需要的函数指针类型。
另外,你可以将wait_irq函数封装在一个结构体中,并将指向该结构体的指针作为pthread_create函数的第三个参数传递。这样可以避免类型不匹配的问题。
complicated_producer_consumer.c:90:59: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ret =pthread_create(&producer_id[i], NULL, producer_fun,(void*)i);
这个警告是因为在代码中将整数类型的变量 `i` 转换为指针类型 `void*`。在不同的平台或编译器下,整数类型和指针类型的大小可能不同,因此这种转换可能会出现问题。
要消除这个警告,可以将 `i` 转换为 `intptr_t` 类型,这是一个整数类型,足够大以容纳指针类型。然后再将 `intptr_t` 类型转换为 `void*` 类型。示例代码如下:
```
ret = pthread_create(&producer_id[i], NULL, producer_fun, (void*)(intptr_t)i);
```
这样就可以避免这个警告了。