C++ 修饰名的格式探究

以下结果是由VS2010里面测试得出:

------------------------------------------------------------------

/*
函数名、类名、名称空间、@@、函数访问级别、调用约定、返回类型、参数类型、有无参数(@Z、XZ)
函数名:	?函数名
类名:	@类名
名称空间:@名称空间名
函数访问级别:
純函数是Y,静态类方法public,protected,private依次是S,K,C
非静态类方法public,protected,private依次是QA,IA,AA
调用约定:__cdecl 是 A , __stdcall 是 G
对于返回类型与参数类型:
void,char,signed char,unsigned char,short,unsigned short,
int,unsigned int,long,unsigned long,float,double,long double,
long long,unsigned long
依次对应:X, D, C, E, F, G, H, I, J, K, M, N, O, _J, _K
有无参数:有参数@Z、无参数XZ
-------------------------------------------------------
int	foo(void);			[email protected]@YAHXZ
short foo(void);			[email protected]@YAFXZ
short foo(int, int);				[email protected]@[email protected]
short __cdecl foo(int, int);		[email protected]@[email protected]
short __stdcall foo(int, int);		[email protected]@[email protected]
short __stdcall muyou::foo(int,int)	[email protected]@@[email protected]
public: static short __stdcall muyou::a::foo(int,int)		[email protected]@[email protected]@[email protected]
protected: static short __stdcall muyou::a::foo(int,int)	[email protected]@[email protected]@[email protected]
private: static short __stdcall muyou::a::foo(int,int)	[email protected]@[email protected]@[email protected]
private: short __stdcall muyou::a::foo(int,int)			[email protected]@[email protected]@[email protected]
protected: short __stdcall muyou::a::foo(int,int)			[email protected]@[email protected]@[email protected]
public: short __stdcall muyou::a::foo(int,int)			[email protected]@[email protected]@[email protected]
-------------------------------------------
void foo();				[email protected]@YAXXZ
void foo(void);			[email protected]@YAXXZ
void foo(char);			[email protected]@[email protected]
void foo(signed char);		[email protected]@[email protected]
void foo(unsigned char);	[email protected]@[email protected]
void foo(short);			[email protected]@[email protected]
void foo(signed short);	[email protected]@[email protected]
void foo(unsigned short);	[email protected]@[email protected]
void foo(int);			[email protected]@[email protected]
void foo(signed int);		[email protected]@[email protected]
void foo(unsigned int);	[email protected]@[email protected]
void foo(long);			[email protected]@[email protected]
void foo(signed long);		[email protected]@[email protected]
void foo(unsigned long);	[email protected]@[email protected]
void foo(float);			[email protected]@[email protected]
void foo(double);			[email protected]@[email protected]
void foo(long double);		[email protected]@[email protected]
void foo(long long);		[email protected]@[email protected]
void foo(signed long long);[email protected]@[email protected]
void foo(unsigned long long);[email protected]@[email protected]
*/
namespace muyou{
	class a
	{
	public:
		short __stdcall foo(int, int);
	public:
		void vf(){foo(1, 1);}
	};
}
using muyou::a;
int main(void)
{
	a oa;
	oa.vf();

	return 0;
}

  

时间: 2024-10-25 13:05:06

C++ 修饰名的格式探究的相关文章

linux下c++filter查看函数修饰名

c++函数在linux系统下编译之后会变成类似下面的样子: _ZNK4Json5ValueixEPKc 在linux命令行使用c++filter: [email protected]:~ $ c++filt _ZNK4Json5ValueixEPKc Json::Value::operator[](char const*) const 这样就得到函数的原始名称 如果没有安装c++filter, 可以自行搜索.linux下c++filter查看函数修饰名,布布扣,bubuko.com

关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

转载自 阿姆的博客 关于asp.net C# 导出Excel文件打开Excel文件格式与扩展名指定格式不一致的解决办法 导致“文件格式与扩展名指定格式不一致”这个问题,是因为大多数人在导出excel文件的时候,都是默认保存excel的格式, 也就是直接workbook.Save(path)或者workbook.SaveAs(path).进而忽略了SaveAs方法里面的参数.与保存excel文件格式有 关的是它第二个参数FileForMat. FileFormat 类型:System.Object

sql 时间转换格式 convert(varchar(10),字段名,转换格式)

convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121)CONVERT为日期转换函数,一般就是在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到的函数的3个参数,第1个参数为,转换后的大小,第2个为转换日期的字段或函数,第3个为转换的格式. 具体如下:0 | 0 or 100 | mon dd yyyy hh:miAM(或P

转 sql 时间转换格式 convert(varchar(10),字段名,转换格式)

convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121)CONVERT为日期转换函数,一般就是在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到的函数的3个参数,第1个参数为,转换后的大小,第2个为转换日期的字段或函数,第3个为转换的格式. 具体如下:0 | 0 or 100 | mon dd yyyy hh:miAM(或P

问题解决——warning C4503 超出修饰名的长度,名称被截断

========================声明============================ 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本声明). 本文不定期修改完善,为保证内容正确,建议移步原文处阅读. 本文链接:http://blog.csdn.net/wlsgzl/article/details/42236503 ======================================================= 领导要实现"以后支持各种检测项目&q

MYSQLD c++函数修饰名转换工具c++filt

会话1: mysql> select now(); 会话2: [[email protected] ~]# stap -v -e 'probe process("/usr/local/mysql56/bin/mysqld").function("*Item_*").call{ if( tid()==7625) printf("%s:%s %d \n",execname(),probefunc(),tid())}' | c++filt 构造函

C++编译时函数名修饰约定规则(很具体),MFC提供的宏,extern "C"的作用

调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法. 1.__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈, 2._cdecl是C和C++程序的缺省调用方式.每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大.函数采用

C++ 编译器的函数名修饰规则

C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置. 多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中, 为了让LINK程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如

【转载】C++ 编译器的函数名修饰规则

转载自:http://mxdxm.iteye.com/blog/510486 C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置.多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中,为了让LINK程