gpt4 book ai didi

c++ - "C++filt"如何找到实际的类型名称?

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:55 24 4
gpt4 key购买 nike

对不起,如果这很愚蠢,但我对此感到困惑。

我做了Google我的问题,但找不到任何相关结果。

对于以下代码编译并写入 a.out :

char x;
cout<<typeid(x).name()<<endl;

/a.out 给了我 c 我期望的 char。我找到了这个 SO问题并得出结论,我们需要使用 c++filt -t 对结果进行分解,所以我这样做了:

./a.out | c++filt -t 

欢呼吧!我得到了 demangled(这不是字典单词)名称 char

很公平!

但令我困惑的问题是 c++filt 是如何找到它的?

我仔细检查了管道的作用 here .如果我理解正确,它只是将输出(在本例中为 c)传递给 c++filt -t

c++filt 在哪里找的信息?

如何使用 c++filt 处理 demangling 过程?

最佳答案

Where did c++filt look for the information?

How the process of demangling work with c++filt?

重整的工作方式取决于您的平台。因此,demangling 的工作方式也取决于它。

c++filt 的程序员查看了描述符号在您的平台上如何被破坏的规范。或者,他们可能只是调用由实现提供的函数来分解符号。

在后一种情况下,实现编译器并因此实现分解函数的人知道符号是如何分解的,因为他们首先实现了分解。

c++filt 是开源软件,您可以阅读其源代码以了解其功能。


如果您对如何自己分解符号感兴趣,我建议您查看编译器的手册。

关于c++ - "C++filt"如何找到实际的类型名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960263/

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