【发布时间】:2017-07-15 20:00:14
【问题描述】:
在浏览标准草案 (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声明同一个函数的目的是什么?为什么这个块不是格式错误的?
【问题讨论】:
-
您的目标是哪个标准?似乎发生了变化,因为如果我正确理解
[extern.names]/4,那么如果这些功能被标记为extern,那么它就是实现定义的。 -
@Rakete1111 N4527
标签: c++