C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用extern“C”连接的过载分辨率大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
一个混合的C/C++项目中,我们需要从C调用C函数.被调用函数被重载为三个单独的函数,但是我们可以从C侧忽略这个函数,我们只选择一个最适合的那个.

有两种方法可以做到这一点:(1)使用一个外部“C”函数编写一个小的C包装器,该函数调用转发到所选择的重载函数,或者(2)黑客方法来声明我们要调用一个函数C作为extern“C”.

问题是,第二个变种有什么缺点(除了恶梦和坏业力)吗?换句话说,给定三个过载的函数,哪里被声明为ex“C”,我们应该期待C方面的麻烦,还是根据标准定义好?

解决方法

我曾表示这是未定义的,但重读标准,我找不到我以为是那里的语言.实际上,§7.5/ 3的示例代码似乎表明结果大概是定义的 – 即只要有一个具有“C”连接的函数就可以使用C连接的其他重载.他们的例子是:
complex sqrt(compleX); // C + + linkage by default
extern "C" {
    double sqrt(doublE); // C linkage
}

两点:1)举个例子,这不是规范性的. 2)它不直接声明这两个声明实际上是允许在同一个程序中.尽管如此,我认为它的意图是它可以被看作是一个单一的代码段,它给出了定义的行为.

在重读之后,我相信标准中的语言是专门用于写出一个具有“C”连接的函数,以及任意数量的具有“C”连接的其他函数,它们重载相同的名称(§7.5/ 6):

大佬总结

以上是大佬教程为你收集整理的c – 使用extern“C”连接的过载分辨率全部内容,希望文章能够帮你解决c – 使用extern“C”连接的过载分辨率所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。