MFC4.2的源码是这么定义的
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
#class_name, sizeof(class class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL };侯sir的仿真代码为:
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
static char _lpsz##class_name[] = #class_name;\
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
_lpsz##class_name, sizeof(class class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL };感觉侯老师的仿真代码更妥当啊!否则按真码,字符串指针指向的空间岂不只是一个临时变量的空间,很不安全啊?有高手能解释一下吗?
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
#class_name, sizeof(class class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL };侯sir的仿真代码为:
#define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
static char _lpsz##class_name[] = #class_name;\
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
_lpsz##class_name, sizeof(class class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL };感觉侯老师的仿真代码更妥当啊!否则按真码,字符串指针指向的空间岂不只是一个临时变量的空间,很不安全啊?有高手能解释一下吗?
不会涉及到变量。譬如:
#define AA(haha) \
printf(#haha);int main(int argc, char* argv[])
{
int iTemp;
AA(iTemp); //这里的iTemp在AA看来,就是"iTemp",就是个字符常量。
return 0;
}所以MFC代码是安全的。