外部 C 和 C++ 对于单个函数(bsearch / qsort)的目的是什么?
What is the purpose of extern C AND C++ for a single function (bsearch / qsort)?
浏览标准草案(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
。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 外部 C 和 C++ 对于单个函数(bsearch / qsort)的目的是什么?