外部 C 和 C++ 对于单个函数(bsearch / qsort)的目的是什么?

What is the purpose of extern C AND C++ for a single function (bsearch / qsort)?

本文关键字:qsort 是什么 bsearch C++ 函数 于单个 外部      更新时间:2023-10-16

浏览标准草案(N4527)时,我发现了以下段落([alg.c.library]):

函数签名:

bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));

替换为两个声明:

extern "C" void* bsearch(const void* key, const void* base,
size_t nmemb, size_t size,
int (*compar)(const void*, const void*));
extern "C++" void* bsearch(const void* key, const void* base,
size_t nmemb, size_t size,
int (*compar)(const void*, const void*));

qsort和同样的东西.

我还在[dcl.link]中找到:

如果两个声明声明具有相同名称和参数类型列表 (8.3.5) 的函数是同一命名空间的成员,或者声明具有相同名称的对象是同一命名空间的成员,并且声明为名称提供了不同的语言链接,则程序格式不正确;

这两个extern声明同一函数的目的是什么?为什么这个块没有格式错误?

参数类型列表不同。真。我不是在开玩笑。两个compar参数有不同的类型:在第一个声明中,因为函数是extern "C"的,所以compar函数也是extern "C"的;在第二个中,compar函数是extern C++"。这就是为什么有两个声明:这样你就可以用具有任一语言链接的函数调用bsearch