1.define定义
define的定义更像是简单的字符串替换,而不是作为一个量来使用,这个问题在下面反映的尤为突出。
2.define的“函数定义”
define可以像函数那样接受一些参数,如下
#define max(x,y) (x)>(y)?(x):(y);
3.存在隐患
当通过如下方式定义时,#define Add(a,b) a+b;
此处c * Add(a,b) * d语句真实的形式为c*a + b*d。而不是c*(a+b)*d。
原因是define只是简单的进行符号替换,使用的时候,将原表达式放进来,不会有其它逻辑含义,切记,此处仅仅是符号替换!!!
4.define和typedef的区别:
再次强调!:#define只是简单的字符串替换,而typedef则是为一个类型起个别名。
例子:
typedef char *pStr1; //此处为char*取一个别名 pStr1。
#define pStr2 char *; //此处只是简单的符号替换
pStr1 s1, s2; //所以这里等同于char* 定义了两个变量s1,s2
pStr2 s3, s4; //而这里只是简单的替换为pStr2 *s3,s4; 所以此处定义的为一个字符指针s3和字符类型变量s4。