define 用于文本替换,称之为宏定义,基本形式为不带参数和带参数两中形式:
(1)#define name struff eg:#define NUM 100
(2)#define name(parameter-list) struff eg:#define SUM(a,b) ((a)+(b))
在利用define进行宏定义时,一定要多注意括号的使用。
(一)#define SQUARE(x) x*x
#define SQUARE1(x) ( (x)*(x))
x=2;
(1)y= SQUARE(x); -----------> y=4;
y= SQUARE1(x); -----------> y=4;
(2)y= SQUARE(x+1); -----------> y=2+1*2+1=5
y= SQUARE1(x+1); -----------> y=3*3=9
(3)y= SQUARE(x++); -----------> y=3*4=12 (分别使用x++替换x,则x先后变为3和4)
y= SQUARE1(x++); -----------> y=3*4=12 (分别使用x++替换x,则x先后变为3和4)
在define定义的宏参数中尽量避免使用++和--,避免例子中的(3)情况出现。
(二)条件编译时使用
# if defined(OS_UNIX)
#ifdef OPTION1 unix_vesion_of_option1(); #endif #ifdef OPTION2 unix_vesion_of_option2(); #endif #elif defined(OS_MSDOS) #ifdef OPTION2 msdos_vesion_of_option2(); #endif #endif