这里介绍的define应用主要是在C程序下的。其功能主要有以下几种:
一、 对变量及数据类型定义
#define MAXTIME 100
注意,在程序编写中,define语句后并没有 ; 结束符。这一点是非常重要的。经过上述定义后,如果在语句中出现MAXTIME,则程序将其替换为100.
即 #define 名字 替换文本
后续所有出现名字的地方将会被替换成替换文本。通常情况下,#define指令占据一行,替换文本是#define指令尾部所有剩余部分内容。但也可以把一个较长的宏定义分成若干行,但此时必须在尾部加上一个反斜杠符 \ 。
在定义宏中各种情况如下:
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
//普通宏
#define PI (3.1415926)
二、 对函数的定义
#define forever for( ; ; )
#define MAX(a, b) ((a)>(b)) ? (a) : (b)
但第二种情况下要注意()的添加。在自增或自减中可能会出现错误情况。所以尽量将所有的层次都添加括号()。
三、 条件编译
在大规模开发中,特别是跨平台和系统的软件里,define最重要的一项功能就是条件编译
#define WINDOWS
...........................
...........................
#endif
#define LINUX
...........................
...........................
#endif
可以在编译的时候,通过#define设置编译的环境
为了保证头文件xx.h的内容只被包含一次,则可以将该文件的内容包含如下形式:
#if SYSTEM == SYSV
#define HDR "xx.h"
#elif SYSTEM == BSD
#define HDR"xxx.h"
#elif SYSTEM == MSDOS
#define HDR"xxxx.h"
#else
#define HDR"xxxxx.h"
#endif
#include HDR
#if !define HDR//或者 #ifndef HDR
#define HDR
// 文件内容放此
#endif
#define宏定义的优点是可以使用#ifdef, #ifndef等来进行逻辑判断。还可以使用#undef来取消宏定义
#typedef的优点在于使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
2011.4.25