欢迎来到天天文库
浏览记录
ID:39466182
大小:40.50 KB
页数:4页
时间:2019-07-04
《MFC中一些宏的说明》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MSC_VER _MSC_VER定义编译器的版本。下面是一些编译器版本的_MSC_VER值(参见扩展阅读中的参考文献2的链接) MSVC++9.0_MSC_VER=1500 MSVC++8.0_MSC_VER=1400 MSVC++7.1_MSC_VER=1310 MSVC++7.0_MSC_VER=1300 MSVC++6.0_MSC_VER=1200 MSVC++5.0_MSC_VER=1100 其中MSVC++9.0就是VisualC++2008,MSVC++8.0就是VisualC++2005。版本名称上的的对应关系参见
2、扩展阅读中的参考文献1的链接. 在程序中加入_MSC_VER宏可以根据编译器版本让编译器选择性地编译一段程序。例如一个版本编译器产生的lib文件可能不能被另一个版本的编译器调用,那么在开发应用程序的时候,在该程序的lib调用库中放入多个版本编译器产生的lib文件。在程序中加入_MSC_VER宏,编译器就能够在调用的时根据其版本自动选择可以链接的lib库版本,如下所示。 #if_MSC_VER>=1400//forvc8,orvc9 #ifdef_DEBUG #pragmacomment(lib,"SomeLib-vc8-d.lib")
3、 #elseif #pragmacomment(lib,"SomeLib-vc8-r.lib") #endif #elif_MSC_VER>=1310//forvc71 #ifdef_DEBUG #pragmacomment(lib,"SomeLib-vc71-d.lib") #elseif #pragmacomment(lib,"SomeLib-vc71-r.lib") #endif #elif_MSC_VER>=1200//forvc6 #ifdef_DEBUG #pragmacomment(lib,"SomeLib-
4、vc6-d.lib") #elseif #pragmacomment(lib,"SomeLib-vc6-r.lib") #endif #endif 本编辑词条参考自扩展阅读中的链接。关于_MSC_VER更详细的说明请点击阅读扩展阅读中的参考文献3,4的链接。于AFX_NOVTABLE的说明2010-06-0410:54 今天在看MFC的源代码时,发现基类CObject的定义是如下形式:#ifdef_AFXDLLclassCObject#elseclassAFX_NOVTABLECObject#endif_AFXDLL是什么东西呢,
5、从网上搜索了一下,发现当新建工程时选择UseMFCinaSharedDLL,则在工程的预编译参数Preprocessordefinitions中会自动加入_AFXDLL宏定义,而如果在新建工程时选择UseMFCinaStaticLibrary则不会添加该宏定义,这时基类CObject的定义变为classAFX_NOVTABLECObject,而AFX_NOVTABLE宏定义又有什么用途呢?继续追踪该宏的定义发现:#ifndefAFX_NOVTABLE#if_MSC_VER>=1100&&!defined(_DEBUG)#defineAFX_NO
6、VTABLE__declspec(novtable)#else#defineAFX_NOVTABLE#endif#endif_MSC_VER用于说明编译器的版本,如MSVC++6.0_MSC_VER=1200,MSVC++5.0_MSC_VER=1100,即当工程编译版本不是debug版本时,宏AFX_NOVTABLE相当于__declspec(novtable),__declspec(novtable)主要是为了减少release版本的最终目标文件的大小,其具体含义可以参考我的另一篇文章:C++中_declspec(novtable)的探讨。
7、 总体上来说对CObject类定义时的一系列修饰是想在以UseMFCinaStaticLibrary方式生成文件时尽量减小文件的大小。C++中_declspec(novtable)的探讨2010-04-1417:40(1)VTABLE(虚函数表)和VPTR(指向虚函数标的指针)的区别编译器到底做了什么实现的虚函数的晚绑定呢?我们来探个究竟。编译器对每个包含虚函数的类创建一个表(称为VTABLE)。在VTABLE中,编译器放置特定类的虚函数地址。在每个带有虚函数的类中,编译器秘密地置一指针,称为vpointer(缩写为VPTR),指向这个对象
8、的VTABLE。通过基类指针做虚函数调用时(也就是做多态调用时),编译器静态地插入取得这个VPTR,并在VTABLE表中查找函数地址的代码,这样就能调
此文档下载收益归作者所有