【问题标题】:C (gcc) warning: initialization from incompatible pointer type when calling pthread_cleanup_push()C (gcc) 警告:调用 pthread_cleanup_push() 时从不兼容的指针类型初始化
【发布时间】:2011-09-01 10:13:42
【问题描述】:

Ubuntu Linux 9.04 下的 gcc 版本 4.3.3,以防万一。

这是有问题的代码:

pthread_cleanup_push(ctl_cleanup, NULL);

将 ctl_cleanup() 定义为

void* ctl_cleanup(void *arg);

在类似的情况下,还有其他情况会弹出此警告。如果我调用类似的东西,也会出现警告

pthread_cleanup_push(pthread_mutex_unlock, (void *)&m);

其中 m 是 pthread_mutex_t 类型。警告内容如下:

警告:从不兼容的指针类型初始化

我不明白。我已经使用 void 指针传递了其他东西(例如,当将参数传递给 pthread 时)没有那个警告。有人可以帮帮我吗?

【问题讨论】:

  • 鉴于 Seth 的解决方案,我发现 GNU C 库文档在 pg 上包含错误。 437. 他们使用 pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut);实际上,您需要将 pthread_mutex_unlock 强制转换为产生上述错误的类型 (void *)。

标签: c pthreads void-pointers


【解决方案1】:
void ctl_cleanup(void *arg);

以上是您正在寻找的原型。它返回 void,而不是指向 void 的指针。

函数中额外的 * 是因为它接受一个指向函数的指针,该函数接受一个返回 void 的 void* 参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 2013-12-16
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多