在我对这个问题的回答之后,在 C++11 和 C++14 中:
[C++11, C++14: 25.5/2]:
内容与标准 C 库头文件相同,但<stdlib.h>
有以下例外:
[C++11, C++14: 25.5/3]:
函数签名: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 *));
两者都具有与原始声明相同的行为。
然而,
[C++11, C++14: 7.5/5]:
如果两个声明将具有相同名称和参数类型列表(8.3.5)的函数声明为同一命名空间的成员,或者将具有相同名称的对象声明为同一命名空间的成员,并且声明赋予名称不同的语言链接,程序格式错误;如果声明出现在不同的翻译单元中,则不需要诊断。[..]
这是缺陷吗?