gpt4 book ai didi

c++ - 使用 extern "C"链接的过载解决方案

转载 作者:可可西里 更新时间:2023-11-01 14:58:55 28 4
gpt4 key购买 nike

在混合的 C/C++ 项目中,我们需要从 C 调用 C++ 函数。要调用的函数被重载为三个独立的函数,但我们可以从 C 端忽略它,我们只选择最合适的并坚持使用那个。

有两种方法可以做到这一点:(1) 编写一个带有 extern "C"函数的小型 C++ 包装器,将调用转发给选定的重载函数,或者 (2) 仅声明我们想要的一个函数的 hackish 方法以 extern "C"的形式从 C 调用。

问题是,选择第二种变体是否有任何缺点(除了噩梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为 exern "C",我们是否应该预料到 C++ 方面的问题,或者这是否根据标准明确定义?

最佳答案

我相信标准中的语言是专门编写的,只允许一个带有“C”链接的函数,以及任意数量的带有“C++”链接的重载相同名称的其他函数(§[dcl.link]/6 ):

At most one function with a particular name can have C language linkage. Two declarations for a function with C language linkage with the same function name (ignoring the namespace names that qualify it) that appear in different namespace scopes refer to the same function. Two declarations for an object with C language linkage with the same name (ignoring the namespace names that qualify it) that appear in different namespace scopes refer to the same object.

标准显示了以下示例:

complex sqrt(complex); // C + + linkage by default
extern "C" {
double sqrt(double); // C linkage
}

关于c++ - 使用 extern "C"链接的过载解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4866043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com