C 与 C++ 中的 Pthread 之间的差异

Differences between Pthread in C vs C++

所以我能够使用 Ada_function'Address 将 Ada 函数传递给 C_function。这是 C 函数:

void Create_Process(int * status, void * function) {
    pthread_t new_thread;

    //creating function with the given function and no arguments.
    *status = pthread_create(&new_thread, NULL, function, NULL);
}

这工作得很好。我的问题是当我尝试在 C++ 中使用相同的函数时。编译失败并出现错误:

error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’ [-fpermissive]
*status = pthread_create(&new_thread, NULL, function, NULL);

有什么原因可以在 C 而不是 C++ 中运行/编译?

C++ 中的隐式类型转换比 C 中严格得多。void * function 参数不能用作 C++ 或 C 中的函数指针...

您的函数原型中需要 void* (*function)(void*)

KIIV 所述,C++ 中的隐式类型转换比 C 中的隐式类型转换严格得多。

void* (*function) (void*)

这是一个指向函数的指针,该函数接受一个 void* 个参数和 return 个 void*

要消除 C++ 中的错误,请将函数更改为 return void *,并在不进行类型转换的情况下传递它。如果您不关心值,线程函数中的 return 可以是一个简单的 return NULL

直接从 C++ 使用此 C 库还有其他各种问题;特别是,为了可移植性,线程入口函数应该是extern "C"。好的做法应该是使用标准的 C++ 线程库(或者 Boost 的实现,如果你坚持使用 2011 之前的语言版本)。