我在C中有以下代码:
pthread_cleanup_push(pthread_mutex_unlock, &mutex);
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时,我得到以下警告:
warning: initialization from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
怎么了?看起来清理处理程序应该返回void*,而不是int.有没有办法绕过这个警告,而无需编写额外的包装器?
表达式pthread_mutex_unlock没有类型void (*)(void *).你需要包装它:
static void cleanup_unlock_mutex(void *p)
{
pthread_mutex_unlock(p);
}
Run Code Online (Sandbox Code Playgroud)
并将此函数的地址传递给pthread_cleanup_push.
其他人可能会建议你施展pthread_mutex_unlock,但这是不正确和不安全的.它将导致函数通过指向错误函数类型的指针调用,从而导致未定义的行为.
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |