IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】typedef 和 #define 的区别 -> 正文阅读

[C++知识库]【C语言】typedef 和 #define 的区别

typedef#define 的区别:

1.#define

#define是用来定义标识符常量,定义宏的。

语法:
#define name stuff

①定义标识符常量

我们可以在代码中定义一些#define的值,而当我们进行到预编译的时候,我们代码中的名字就会被替换。

比如:

#define MAX 100
//当我们定义一个MAX为100
int main()
{

	int a = MAX;
	printf("%d", a);

	return 0;
}

经历了预处理的过程后,其实代码中会变成这样:

//#define消失了
int main()
{

	int a = 100;//MAX被替换为#define定义的值
	printf("%d", a);

	return 0;
}

而且#define定义的不止是一些数值,还可以定义一些标识符常量:

#define db double
//比如我嫌double变量名字太长,我把他定义为db
int main()
{

	db a = 5.5;
	printf("%lf", a);
    //打印结果:5.500000
	return 0;
}

还有很多例子:

#define do_forever for(;;)     //用更形象的符号来替换一种实现
#define CASE break;case        //在写case语句的时候自动把 break写上。

2.typedef

typedef是在C和C++编程语言中一个关键字。它用来对一个资料类型起一个新名字。目的是为了使源代码更易于阅读和理解。

typedef在C语言中为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

比如:

typedef double db;

int main()
{
	db a = 5.5;
	printf("%lf", a);
	return 0;
}

3.typedef 和 #define 的区别

  1. #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

  2. typedef是在编译时才处理的。

  3. 一般来说#define定义的宏是没有作用域限制的,只要在使用前有定义就可以使用。而typedef定义的别名是有作用域的。

而关于这两者,有一个经典例题:

#define prt_t int *
typedef int* prt_t2;

int main()
{
	prt_t p1, p2;
	
	prt_t2 p3, p4;
    //这里分别定义的是什么?
	return 0;
}

对于prt_t p1, p2;来说,在预处理后会替换成int *p1,p2;,也就是说替换后不难看出,p1是指针,p2是整形。而prt_t2 p3, p4;中定义的p3和p4,都是指针类型。

所以对于#define 定义的宏定义只是简单的字符串代换(原地扩展),而typedef的新名字同样是一种类型,只是叫法不一样了。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:49:20  更:2021-10-17 11:51:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:39:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码