gpt4 book ai didi

c++ - 命名空间嵌套函数的最佳实践和语义以及extern "C"的使用

转载 作者:太空狗 更新时间:2023-10-29 20:18:23 24 4
gpt4 key购买 nike

我正在创建一个带有 C-ABI 接口(interface)的 C++ 库。

这就是 GCC 在处理方面如何处理外部“C”限定符:

namespace x {

extern "C" int monkey(int x) {
return 1;
}

int chimpanzee(int x) {
return 1;
}
}

相关的nm输出:

00000000004005cd T _ZN1x10chimpanzeeEi
00000000004005bf T monkey

问题:我想将 C-ABI 中涉及的函数留在命名空间内,以获得最大的重用灵 active 。 重要提示:库编译完成后,我将向链接器提供映射文件 (GCC) 或模块定义文件 (MSVC)。

  1. 重整输出是否为标准行为——其他主要编译器(特别是 MSVC)是否也会剥离重整?
  2. 当他们参与外部 ABI 时,他们是否有关于将函数放置在 namespace 中的任何陷阱或最佳实践?
  3. 这是否会在链接时干扰 C-ABI 导出的反编译函数?

最佳答案

您所做的一切都很好,并且会给您带来您想要的效果。来自 C++ 编程语言,第 3 版,第 208 页:“可以在 namespace 中声明带有 C 链接的名称。 namespace 会影响名称在 C++ 程序中的访问方式,但不会影响链接器看到它的方式。std 中的 printf() 是一个典型的例子。…即使使用 std::printf() 调用,它仍然是旧的 C printf()。”

关于c++ - 命名空间嵌套函数的最佳实践和语义以及extern "C"的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186165/

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