编程方式解析C++符号修饰别名(mangled name)

C++的符号修饰别名解决了函数重载等特性引起的命名冲突问题,不同编译器如gcc、msvc有不同的修饰规则。虽然没有统一标准,但提供了接口进行解析。本文将探讨如何在代码中使用GCC/CLANG的demangle接口,特别是在wine源码中找到的微软接口定义。
摘要由CSDN通过智能技术生成

      相比C语言,C++支持函数重载、类、模版等各种特性,如果C++的符号修饰仍按照C那样直接使用对应名称,虽然可读性很好,却不可避免的会出现各种错乱,于是C++符号修饰别名(mangled name)被设计出来, 用来解决上述问题,然而修饰规则取决于编译器实现,没有统一标准,比如gcc、msvc就各有一套,但好在都提供了相应接口进行解析(demangle),这里有个网站http://demangler.com/可以在线解析,下面介绍如何在代码中使用他们:

GCC/CLANG

#include <stdio.h>
#include <cxxabi.h>

// http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html
int main()
{
	int status;
	char *name = abi::__cxa_demangle(MANGLED_NAME, NULL, NULL, &status);
	if (name != NULL) { 
		printf("%s\n", name);
		free(name);
	} //if
	
	return 0;
}
MSVC

不知何种原因,微软的这个接口似乎并未公开,自然也没像gcc那样的文档,不过在w

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值