gpt4 book ai didi

c++ - 在 Linux 上处理 C++ 名称时什么算作符号?

转载 作者:太空狗 更新时间:2023-10-29 12:02:19 24 4
gpt4 key购买 nike

在 Linux g++/clang++ 上

void test10058l(void*(*)(void*),void*(*)(const void*),const void*(*)(void*));

被破坏为 _Z10test10058lPFPvS_EPFS_PKvEPFS3_S_E

  • 根据g++/clang++,这个函数定义中有多少个符号?
  • 有哪些替代品? (S_, S0_, S1_, ...)
  • 更具体地说,什么是 S3_

(编辑 - 添加一些上下文)

D language允许 interact with C++通过将符号声明为 extern(C++)

不幸的是,当前的实现并不总是正确的——我正在尝试通过实现当前的 g++/clang++ 名称修改方案来修复它 as defined by the Itanium C++ ABI .

由于这份文件不是很清楚,我很难理解什么是符号。

最佳答案

经过几次实验,我设法理解了符号是如何被替换的。特别是,限定类型会创建新的符号并自行解释符号的功能。指向函数的指针就是另一个符号。

这是我提供的示例的替换细目。

void test10058l(void*(*)(void*),void*(*)(const void*),const void*(*)(void*));

    _Z10test10058lPFPvS_EPFS_PKvEPFS3_S_E
S_ ^^ : Pv void*
S0_ ^^^^^^ : FPvS_E void*()(void*)
S1_ ^^^^^^^ : PFPvS_E void*(*)(void*)
S2_ ^^ : Kv const void
S3_ ^^^ : PKv const void*
S4_ ^^^^^^^ : FS_PKvE void*()(const void*)
S5_ ^^^^^^^^ : PFS_PKvE void*(*)(const void*)
S6_ ^^^^^^^ : FS3_S_E const void*()(void*)
S7_ ^^^^^^^^ : PFS3_S_E const void*(*)(void*)

我开始了这个git repository报告我关于 linux/osx GCC C++ 名称修改的发现。

关于c++ - 在 Linux 上处理 C++ 名称时什么算作符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30547238/

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