简单的#define定义
#define MAXTIME 1000
一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){.........}
编译器在处理这个代码之前会对MAXTIME进行处理替换为1000.这样的定义看起来类似于普通的常量定义CONST,但也有着不同,因为define的定义更像是简单的文本替换,而不是作为一个量来使用。
#define的函数定义
define可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
但是存在隐患
比如:
#define pin (int*);
pin a,b;
本意是a和b都是int型指针,但是实际上变成int* a,b; a是int型指针,而b是int型变量。 这是应该使用typedef来代替define,这样a和b就都是int型指针了。 所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。
#define的多行定义
define可以替代多行的代码,例如MFC中的宏定义
#define MACRO(arg1, arg2)
do { \
/* declarations */ \
stmt1; \
stmt2; \
/* ... */ \
} while(0) /* (no trailing ; ) */
关键是要在每一个换行的时候加上一个"\" 。
#define的条件编译
在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译
就是:
#ifdef XXX…(#else) … #endif
#ifdef DV22_AUX_INPUT
#define AUX_MODE 3
#else
#define AUY_MODE 3
#endif
可以在编译的时候通过#define设置编译环境
如何定义宏,取消宏
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
//普通宏
#define PI (3.1415926)
//带参数的宏
#define max(a,b) ((a)>(b)? (a),(b))//这个要慎用
头文件(.h)可以被头文件或C文件包含
重复包含(重复定义) 由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的。 通过条件编译开关来避免重复包含(重复定义) 例如
#ifndef __headerfileXXX__
#define __headerfileXXX__
…
//文件内容
…
#endif
//#ifdef的使用和#if defined()的用法一致
//#ifndef又和#if !defined()的用法一致。
重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
参考百度文库