VC++开发GIS系统(3)关于#ifndef#define#endif的说明
发布时间: 2014-07-25
所属分类: VC++开发GIS系统
在我之前的文章使用DLL导出类编程示例中使用到了下面的这样一组代码。
#ifndef _CALLDLG_H_EXPORT #define CALLDLG_EXPORT __declspec(dllimport) #else #define CALLDLG_EXPORT __declspec(dllexport) #endif
并且在文章warning C4273: dll链接不一致对产生的warning进行了说明和改正。但是很多朋友可能并不了解这代码的含义,包括我本人在内。本文尝试做一个简单的说明。
头文件的重复包含
其实最常见的就是在头文件的重复包含问题的解决上,通常在写头文件的时候会有下面这样的代码。
#ifndef _MYHEADER_H_ #define _MYHEADER_H_//yourcode
#endif
在理论上来说_MYHEADER_H_可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:myheader.h(参考)
条件编译
另外的一种应用也比较常见,就是条件编译。如:
#ifdef _DEBUG TRACE("debug mode"); #else //release mode #endif
如果在debug模式下可以查看相关信息,而在release模式下就看不到。
关于DLL导出
也许许多人就是为了看这个的,在之前的文章中我也就是用了这样的代码:
#ifndef _CALLDLG_H_EXPORT #define CALLDLG_EXPORT __declspec(dllimport) #else #define CALLDLG_EXPORT __declspec(dllexport) #endif
这代码的意义就是:这样在DLL代码本身就是__declspec(dllexport) ,在使用DLL的程序中就变成了__declspec(dllimport),这两标志分别用来指明当前的函数将被导出,和当前函数是被导入的(参考)。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子