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):
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |