麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

VC++开发GIS系统(3)关于#ifndef#define#endif的说明

在我之前的文章使用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),这两标志分别用来指明当前的函数将被导出,和当前函数是被导入的(参考)。

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)