Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当损坏C++;Linux上的名字?_C++_Linux_Name Mangling - Fatal编程技术网

C++ 当损坏C++;Linux上的名字?

C++ 当损坏C++;Linux上的名字?,c++,linux,name-mangling,C++,Linux,Name Mangling,在Linux上g++/clang++ void test10058l(void*(*)(void*),void*(*)(const void*),const void*(*)(void*)); 被损坏为\u Z10test10058lPFPvS\u EPFS\u PKvEPFS3\u S\u E 根据g++/clang++,此函数定义中有多少符号 替代品是什么?(S,S0,S1,…) 更具体地说,什么是S3 (编辑-添加一些上下文) 允许通过将符号声明为extern(C++)来执行 不幸的

在Linux上g++/clang++

void test10058l(void*(*)(void*),void*(*)(const void*),const void*(*)(void*));
被损坏为
\u Z10test10058lPFPvS\u EPFS\u PKvEPFS3\u S\u E

  • 根据g++/clang++,此函数定义中有多少符号
  • 替代品是什么?(
    S
    S0
    S1
    ,…)
  • 更具体地说,什么是
    S3
(编辑-添加一些上下文)

允许通过将符号声明为
extern(C++)
来执行

不幸的是,当前的实现并不总是正确的——我正试图通过实现当前的g++/clang++名称损坏方案来修复它


由于本文档并不十分清晰,我很难理解什么是符号。

函数损坏是依赖于编译器的活动,对此没有标准的指导。经过几次实验,我终于理解了符号是如何被替换的。你们可以使用下面的工具来定义符号。特别是,限定类型会创建新符号,并且函数会自行解释符号。指向函数的指针就是另一个符号

下面是我提供的示例的替换的分解

void test10058l(void*(*)(void*)、void*(*)(const void*)、const void*(*)(void*))


我开始报告我关于Linux /OSX GCC C++名字的发现。

为什么你需要知道确切的信息?这取决于实际编译器的实现。您可以使用demangle
typeinfo::name()
results顺便说一句。我的问题不清楚,我添加了一些上下文。我将看一看
abi::\ucxa\udemangle
这可能会有所帮助。谢谢!是的,我想我的问题缺少一些背景。请再看一看。
    _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*)