1、#define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确照样进行替换,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define NUM 255
程序中的:for(i=0; i<NUM; i++) 中NUM会替换为255。
如果把#define语句中的数字255写成abc预处理也照样置换,而不进行检查。
而且#define语句是预编译语句,不能在行末加分号,否则会连分号一起置换。
#define NUM 255;
程序中的:for(i=0; i<NUM; i++) 会替换为:
for(i=0; i<255;; i++)
2、typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,他是语言编译过程的一部分,并不实际分配内存空间。
3、typedef int * your_int;
与
#define your_int int *
作用都是用int_ptr代表 int * ,但是二者不同:
#define在预处理时进行简单的替换,而typedef不是简单替换,而是声明一种类型。下面的例子最能说明问题:
#define your_int int *
your_int a, b; //相当于int *a, b; 只是简单的宏替换。
typedef int* your_int;
your_int a, b; //a, b 都为指向int的指针,相当于int *a, *b;