相比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