#define和typedef的区别

来源:互联网 发布:python 文件读取 编辑:程序博客网 时间:2024/06/09 19:30

一,区别
1,typedef 关键字,从字面意思来看,类型定义,其实不然,他不是类型定义,而是给现有的类型起别名,理解成 typerename 更好。并不会增加新的数据类型,但可以使书写更方便
2,typedef 只对数据类型起作用,#define 还可以作用于数据。
3,#define 处理的信息发生预处理阶段。而 typedef 是 c 语言语句,发生在编译阶段。
4 预处理不是c语言语句,所以在使用时不应该加“;”,预处理命令是在预处理阶段完成,本质是替换操作,常用大写字母来表示
5 程序执行的步奏:预处理(在此阶段不会进行错误的检查),汇编,编译(在在此处函数只要定义就可以编译通过),链接(在此阶段函数需要有实现)
6取消宏定义 #undef MAx
二,案例

#define  CHAR char *typedef char * CHARP ; //为char *起一个别名typedef int ARRY[10] ; //为int数组起别名int main(void){   CHAR pa,pb;//like char *pa,pb;   CHARP pat,pbt;//like char* pat,*pbt;   ARRY arr;//like int arr[10];   printf("pa=%d,pb=%d\n",sizeof(pa),sizeof(pb));   printf("pat=%d,pbt=%d\n",sizeof(pat),sizeof(pbt));    printf("arr=%d\n",sizeof(arr));    return 0;}

结果如下
这里写图片描述

如何在使用#define时适当的加上括号 也许就不一样了哦

#define  CHAR (char *)typedef char * CHARP ; //为char *起一个别名typedef int ARRY[10] ; //为int数组起别名int main(void){   CHAR pa,pb;//like char *pa,pb;   CHARP pat,pbt;//like char* pat,*pbt;   ARRY arr;//like int arr[10];   printf("pa=%d,pb=%d\n",sizeof(pa),sizeof(pb));   printf("pat=%d,pbt=%d\n",sizeof(pat),sizeof(pbt));    printf("arr=%d\n",sizeof(arr));    return 0;}

结果:
这里写图片描述
因为CHAR pa,pb; 就类似于(char*)pa,pb这样不对的语法,#define在使用的时候只是进行代替而不进行变化,所以在使用时不应该进行变化要直接带进去然后再进去相对应的运算。

1 0
原创粉丝点击