在C语言里,#define 与 typedef 看起来是挺接近的东西。我们可以让他们达到相同的效果,比如:
#define MY_TYPE int typedef int My_Type;
但本质来说,他们的区别可大了去了。
1. 编译时间不同
#define
is a preprocessor token: the compiler itself will never see it.
typedef
is a compiler token: the preprocessor does not care about it.
#define是在预编译阶段编译的,而typedef是在编译的时候才执行的。
2. #define只是简单的替换,而typedef是为一个原有的关键字起一个“别名”。
2.1 #define 经常被用来处理“魔数”问题,例如
#define PI 3.1415926;
2.1 typedef的主要用在给结构体起别名,例如:
typedef struct student
{
char name[16];
int age;
double score;
} Stu,*pStu;</p>
2.3 定义指针时的区别</h6>
typedef int* int_p1; int_p1 a, b, c; // a, b, and c are all int pointers. #define int_p2 int* int_p2 a, b, c; // only the first is a pointer!
2.4 只能用 typedef 的时候
#define MY_TYPE void (*)(int) typedef void (*fun_p)(int); void fx_typ(fun_p fx); /* ok */ void fx_def(MY_TYPE fx); /* error */ typedef int arr[10]; arr a, b, c; // create three 10-int array
3.参数问题:#define是可以带参数的,例如:
#define XX(a,b) myfun(a,b);