05. vs2019名称粉碎的简单解析
/* 只写声明,不写实现,然后直接调用,查看错误提示 void __cdecl foo(int)" (?foo@@YAXH@Z) void __cdecl foo(int,int)" (?foo@@YAXHH@Z) void __cdecl foo(char,short,int,__int64)" (?foo@@YAXDFH_J@Z) void __cdecl foo(unsigned char,unsigned short,unsigned int,unsigned __int64)" (?foo@@YAXEGI_K@Z) void __cdecl foo(float,double)" (?foo@@YAXMN@Z) void __cdecl foo(void)" (?foo@@YAXXZ) int __cdecl foo(void)" (?foo@@YAHXZ) void __cdecl foo(void)" (?foo@@YAXXZ) void __stdcall foo(void)" (?foo@@YGXXZ) void __fastcall foo(void)" (?foo@@YIXXZ) void __fastcall N1::N2::N3::foo(void)" (?foo@N3@N2@N1@@YIXXZ) public: void __fastcall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@QAIXXZ) public: void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@QAEXXZ) private: void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@AAEXXZ) protected: void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@IAEXXZ) protected: virtual void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@MAEXXZ) public: virtual void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@UAEXXZ) private: virtual void __thiscall N1::N2::N3::C::foo(void)" (?foo@C@N3@N2@N1@@EAEXXZ) private: virtual void __thiscall N1::N2::N3::C::foo(int)" (?foo@C@N3@N2@N1@@EAEXH@Z) private: virtual bool __thiscall N1::N2::N3::C::foo(int)" (?foo@C@N3@N2@N1@@EAE_NH@Z) private: virtual bool __thiscall N1::N2::N3::C::foo(bool)" (?foo@C@N3@N2@N1@@EAE_N_N@Z) 开头的?可能是开始标志,末尾的@Z可能是结束标志 ?函数名@最内层命名空间@中间一层命名空间@最外层命名空间@@函数类型 调用约定 返回类型 参数1类型 参数2类型 参数n类型@Z 如果没有参数,@Z变为Z 函数类型: A private函数 E private virtual 函数 I protected函数 M protected virtual 函数 Q public函数 U public virtual 函数 Y 普通函数 调用约定: A __cdecl E __thiscall G __stdcall I __fastcall 数据类型: D char E unsigned char F short G unsigned short H int I unsigned int _J __int64 _K unsigned __int64 M float N double _N bool X void */