Visual C++名字修饰 Name mangling或者Decorated Name是指程序设计语言中具有存储性质的对象的名字被编译器改写以适合编译器链接器linker汇编器assembler使用所谓的具有存储性质的对象即lvalue对象是指要实际占用内存空间有内存地址的那些实体对象例如变量variables函数函数指针等C中的纯虚函数作为特例也属于这一范畴而数据类型data type就不属于具有存储性质的对象Name mangling如何翻译成中文尚无广泛接受的译法可翻译作改名或名字修饰name decorating 对于支持重载overload的程序设计语言name mangling是必需的因而具有特别重要意义C允许函数重载 int fooint i void foochar c C也允许变量名称在不同限定qualifier下同名 stdcout cout 因此C的编译器必须给这些函数及变量不同的名字以供程序编译链接载入时的内部辨别使用 C的编译器可大略分为Windows平台上的Microsoft Visual C与类Unix平台上的GNU CCg两大类分别成了各自操作系统环境下的业界工业标准例如Windows平台上的Intel C CompilerICC与Digital Mars C都与Visual C保持了二进制兼容Application Binary Interface ABI而Linux平台上的Intel C CompilerICC与HP aC都与GCC xx做到二进制兼容GCC是开源产品它的内部实现机制是公开的而Visual C不公开它内部实现细节因此在name mangling上并无详尽的正式文档Visual C name mangling的细节属于hacker行为 一般情况下编程者不需要知道CC函数的修饰名字但是如果在汇编源程序或者内联汇编中引用了CC函数就必须使用其正确的修饰名字