typedef(类型重定义)是给原有的数据类型取一个别名,重定义的类型具有与原有类型相等同的权柄;
define(宏定义)是一个简单替换,在编译时,宏定义会被它所代表的数据直接替换掉;
直接看例1 :
#include <stdio.h>
typedef int* INTP;
#define INT_ int*
void main(){
INTP p,q; // p和q都会是int* 类型的指针
INT_ t,m; // 而这只有 t 是 int* 类型指针 ,m是int整型变量
}
我们通过gcc -E 预处理一下可以看到,INT_在编译后是直接被简单替换成 int* 的,而typedef的int*则会被看作一个整体。
例2:
#include <stdio.h>
typedef int* INTP;
#define INT_ int*
void main(){
const INTP p1; // p1不能修改,但指向的变量的值可以修改 <==> int* const p;
const INT_ p2; // p2可以修改,但指向的变量的值不可修改 <==> const int *p; <==> int const *p;
}
通过两个例子可以看出,typedef重定义的类型会是一个不可分割的整体,而define宏定义只不过是把其代表的数据在编译时进行简单替换。
个人学习笔记,如果有误,欢迎大佬指正!!