typedef和define有什么区别
typedef 和define 都是替一个对象取一个别名,以此增强程序的可读性,区别如下:
使用不用
define 定义后面不用加分号,并且它的别名在对象的前面
typedef需要加分号,并且它的别名后面在替换对象的前面
原理不同
define是C语言中定义的语法,是预处理指令,在预处理进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。
typedef是关键字,在编译时处理,有类型检查功能。他在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便 ,不仅使程序书写简单,也使意义明确,增强可读性。
功能不同
typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能时定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL,在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL
define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
作用域不同
define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域
常见问题
与const组合
typedef char* pstr
"const pstr p" 会被解释为"char* const p:" 不能更改指向的地址(指针常量---地址是个常量,指针的内容是可以更改的)
如果是define则会被解读为const char* p 指针指向一个常量,可以更改指向的地址。
define和函数的区别
define 不会开辟空间 而函数会开辟堆栈空间
#include "stdafx.h"
#define MAX(A,B) ((A)>(B)?(A):(B))
int main(int argc, char* argv[])
{
printf ("%d",MAX(5,6));
printf("Hello World!\n");
return 0;
}
int Function(int x ,int y)
{
return x>y?x:y;
}
1、宏名标识符与左圆括号之间不允许有空白符,应紧接在一起. |
---|
2、宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换. |
3、为了避免出错,宏定义中给形参加上括号. |
4、末尾不需要分号. |
5、define可以替代多行的代码,记得后面加 \ |
- 6.#define MALLOC(n,type)((type)malloc((n)sizeof(type)))
本文作者:不会笑的孩子
本文链接:https://www.cnblogs.com/doubleconquer/p/16378836.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律