我在 Boost 代码中找到了这样的例子。
namespace boost {
namespace {
extern "C" void *thread_proxy(void *f)
{
....
}
} // anonymous
void thread::thread_start(...)
{
...
pthread_create(something,0,&thread_proxy,something_else);
...
}
} // boost
为什么你真的需要这个extern "C"
?
很明显,该thread_proxy
函数是私有的内部函数,我不希望它被修改为“thread_proxy”,因为我实际上根本不需要它。
事实上,在我编写并在许多平台上运行的所有代码中,我从未使用过extern "C"
,而且这与正常功能一样工作。
为什么要extern "C"
添加?
我的问题是extern "C"
函数污染了全局命名空间,它们实际上并没有像作者期望的那样隐藏。
这不是重复的! 我不是在谈论修饰和外部链接。在这段代码中很明显不需要外部链接!
答: C 和 C++ 函数的调用约定不一定相同,所以需要创建一个具有 C 调用约定的。请参阅 C++ 标准的 7.5 (p4)。