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;
相关推荐
我不会起名字32226 分钟前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
huang5791472 小时前
哈希算法的抗碰撞机制与安全性增强策略4
算法
林浩杨_3 小时前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法
Elsa️7463 小时前
算法一周刷题总结
c++·算法
小小程序猴13 小时前
深圳乘路资讯AI培训怎么样?课程靠谱吗?——一套课程可信度评估模型与实证分析
人工智能·算法
云上先途3 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
彧azz4 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先
宣宣猪的小花园.4 小时前
【机器学习】损失函数与梯度下降:机器如何通过“犯错”不断变好
人工智能·算法·机器学习
青山木5 小时前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
土司大王5 小时前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode