所以,我是能够通过使用Ada_function'Address到C_function的阿达功能。这里是C函数:差异用C对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++是不同的语言?相同的语法并不意味着相同的语义。 – Olaf
你不应该处理函数指针作为指针指向的对象 - 他们都不能保证是相同的大小,即使在C(虽然他们通常是相同的大小)。 C++对这样的问题更加感兴趣;你必须明确地将'void *'转换为所需的类型,而C为你随便这么做 - 这是C++程序员有时对C持怀疑态度的原因之一。简单地说,有很多C代码是无效的C++代码;你的功能就是这样的代码的一个例子。 –
你的C函数似乎没有直接使用'pthread_create()'增加任何值。事实上,你失去了线程ID'pthread_t'。 –