首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

带参数的宏,有哪位高人能说说用法,该怎么解决

2012-03-17 
带参数的宏,有哪位高人能说说用法例如:下面两个宏#defineDECLARE_DYNAMIC(class_name)\public:\staticCRun

带参数的宏,有哪位高人能说说用法
例如:
下面两个宏
#define   DECLARE_DYNAMIC(class_name)   \
public:   \
static   CRuntimeClass   class##class_name;   \
virtual   CRuntimeClass*   GetRuntimeClass()   const;

#define   _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,wSchema,pfnNew)\
static   char   _lpsz##class_name[]   =   #class_name;   \
.......................................................(这个没写全)
特别问下一个#和两个##的区别。

[解决办法]
#aaa
处理结果就是 "aaa "
aa##bb
处理结果就是 aabb
[解决办法]
# Convert it into string
eg :
#3 --〉 “3”

## link string
[解决办法]
当然不一样了。
class_name是一个符号,用#把符号转换成字符串。
_lpsz是固定不变的,class_name作为参数传进来,用##连接成新的变量名
[解决办法]
## 是连接符号,其功能是在带参数的宏定义中将两个子串(token)联接起来,#符是把传递过来的参数当成字符串进行替代。

MSDN:

#define paster( n ) printf( "token " #n " = %d ", token##n )
同时又定义了一个整形变量:
int token9 = 9;
结果是:
printf( "token " "9 " " = %d ", token9 );
paster(9);”9”被当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代

[解决办法]
举个例子class _name[]= "CApp "
展开
static char _lpsz##class_name[] = #class_name
如下
staic char _lpszCApp[] = "CApp "

热点排行