C++符号解析

这篇博客介绍了C++中的名称修饰机制,即GCC如何将函数和变量的名字转换为可链接的形式。文章指出,这个过程以‘_Z’开头,包含名称空间和类名,并以参数列表结束。为了简化解析,C++提供了一个工具c++filt,能够将修饰后的名称转换回可读形式。举例来说,函数N::C::func(int)修饰后的签名是_ZN1N1C4funcEi,通过c++filt可以轻松还原。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在代码进行连接的时候,经常找不到某个函数,不过由于c++做了一些修饰,所以很多时候不大清楚这个字符串到底代表什么,下面是一位大神给的解释:地址

GCC的基本C++名称修饰方法如下:所有的符号都以"_Z"开头,对于嵌套的名字(在名称空间或在类里面的),后面紧跟"N",然后是各个名称空间和类的名字,每个名字前是名字字符串长度,再以"E"结尾。比如N::C::func经过名称修饰以后就是_ZN1N1C4funcE。对于一个函数来说,它的参数列表紧跟在"E"后面,对于int类型来说,就是字母"i"。所以整个N::C::func(int)函数签名经过修饰为_ZN1N1C4funcEi。更为具体的修饰方法我们在这里不详细介绍,有兴趣的读者可以参考GCC的名称修饰标准。

不过考虑到自己解析麻烦,C++也提供了相应的工具 c++filt :

 c++filt _ZN5trans3std4funcEi
 //result
 trans::std::func(int)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值