You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PThreads报错void *(*)()与void *(*)(void *)类型不兼容求解

报错原因

你遇到的类型不匹配报错,核心原因是pthread_create要求传入的线程入口函数有固定签名:void* (*)(void*),即返回值为void*、接收一个void*类型的入参。
你编写的sample函数参数列表为空,类型为void* (*)(),和要求的函数指针类型不兼容,因此编译器抛出错误。

部分老旧编译环境会放宽空参数函数的类型检查,因此旧教程中的不规范写法在老环境下可能偶然运行成功,但新版本编译器(包括你当前使用的VS环境)会执行严格类型校验,直接拦截这类不匹配问题。该报错和你提到的「未删除头文件317行内容」的操作无关,你本地对应位置不存在该行内容,说明你使用的pthread版本本身就不需要做这个修改。

修复方案

修改sample函数的定义,使其签名完全匹配pthread的要求:即使你不需要使用传入的参数,也必须在形参列表声明void*类型的形参,同时补全void*类型的返回值(无有效返回内容时返回NULL即可)。

修正后的完整代码
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

// 匹配pthread要求的线程入口函数签名
void* sample(void* arg) {
    printf("Thread sample. \n");
    return NULL;
}

int main(void) {
    pthread_t tid;
    pthread_create(&tid, NULL, sample, NULL);
    pthread_join(tid, NULL);
    return 0;
}
补充说明
  • pthread_create第三个参数传入线程函数时,直接写函数名即可,函数名会自动隐式转换为函数指针,额外加取地址符&不会触发错误但属于冗余写法。
  • 只要你已经完成了VS中pthread库的头文件路径、链接库路径、依赖项配置,替换上述代码后即可正常编译运行,不需要额外修改pthread头文件内容。

内容的提问来源于stack exchange,提问作者Ken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:33:22