typedef 与#define 的区别

共性:都是起别名

区别:

原理不同

#define是预处理指令,在预处理时进行简单机械的字符串替换,不做正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错

typedef是关键字,编译时处理,由类型检查功能。。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。

作用域不同

#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。

typedef有自己的作用域。在所有函数外,作用域为从它定义开始直到文件尾;在函数内,作用域为从定义开始直到该函数尾。

注意

1.与#define不同,typedef创建的符号名只受限于类型,不能用于值

2.typedef由编译器解释,而不是预处理器;#define预处理器处理

3.在其受限范围内,typedef比#define更灵活

总结

typedef只能给类型起别名,#define可以给类型也可以给数字起别名。使用时,一般用#define为数字起别名,用typedef为类型起别名。

如果使用#define为类型起别名,不能连续定义变量(#define只替换原来的位置 )

cs 复制代码
#define ElemType char*
ElemType a,b;//#define不能连续定义两个变量
//相当于char*a;char b;
相关推荐
朝朝又沐沐3 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
薰衣草23334 小时前
一天两道力扣(6)
算法·leetcode
剪一朵云爱着4 小时前
力扣946. 验证栈序列
算法·
遇见尚硅谷4 小时前
C语言:*p++与p++有何区别
c语言·开发语言·笔记·学习·算法
天天开心(∩_∩)4 小时前
代码随想录算法训练营第三十二天
算法
YouQian7725 小时前
(AC)缓存系统
算法·缓存
艾莉丝努力练剑5 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
科大饭桶5 小时前
数据结构自学Day13 -- 快速排序--“前后指针法”
数据结构·算法·leetcode·排序算法·c
李永奉5 小时前
C语言-流程控制语句:for循环语句、while和do…while循环语句;
c语言·开发语言·c++·算法
程序员-King.5 小时前
day69—动态规划—爬楼梯(LeetCode-70)
算法·动态规划