C语言 宏define

本文介绍了C语言中的宏替换,它是预处理阶段的一种整体替换,增强了代码可读性。宏定义包括无参数和带参数的情况,如#defineMAX10,以及计算数组长度的宏ARR_LEN。同时,文章对比了宏替换与typedef的区别,typedef能真正创建新类型,如typedefint*p_INT。文章还涵盖了C语言的编译过程,从预处理到执行的五个阶段。
摘要由CSDN通过智能技术生成

define就是宏替换,宏是整体的意思,那么宏替换就是整体替换,它发生在预处理期,它有两种替换方式。一种是#define 宏名 替换内容,这是内容没有可变部位的方式,而如果内容中有可变的部位,他就是#define 宏名(可变部位) 内容模板,其中包括可变部位和不变内容,可变的一般为数组名或数据类型。它也可以进行宏的嵌套定义,将D替换为C,将C替换为B,再将B换成A。宏替换最大的意义也是增强代码的可读性。它是一个纯复制粘贴的过程,而typedef是真正的重新命名,定义了一个新的类型。

C 语言启动的经历:
    1:预处理期: 在这一阶段,源码中的所有预处理语句得到处理例如:#include语句所包含的文件内容替换掉语句本身,所有已定义的宏被展开。
    2:编译期:编译器对源码进行词法分析、语法分析、优化等操作,最后生成汇编代码。
    3:汇编期:生成机器语言代码,保存在后缀为.o的目标文件中
    4:链接期:经过汇编以后的机器代码还不能直接运行。为了使操作系统能够正确加载可执行文件,文件中必须包含固定格式的信息头,还必须与系统提供的启动代码链接起来才能正常运行,这些工作都是由链接器来完成的。
    5:执行期:执行.EXE文件,得到运行结果

宏替换简称宏的格式:
    #define 宏替换名称  替换内容

#include <stdio.h>
 
#define MAX 10//宏是整体的意思 宏替换其实就是整体替换
#define PINT int* //纯复制粘贴的过程
typedef int* p_INT;//真正的重新命名 他是定义了一个新的类型
#define PT printf("HelloWorld. ");
#define A PT PT PT PT PT PT PT PT PT PT
#define B A A A A A A A A A A
#define C B B B B B B B B B B
#define ARR_LEN(array_name) sizeof(array_name) / sizeof(array_name[0])
#define ARR_LEN2(arr_name,arr_type) sizeof(arr_name) / sizeof(arr_type)
#define TRUE 1
#define FALSE 0
typedef int _BOOLEAN_;
int a[MAX], b[MAX];

1 替换类型名称 对比typedef的差异

	PINT p, q, m;
	p_INT x, y, z;

PINT为宏替换,只是复制粘贴,所以只有p是int型指针,而q和m都为int类型;但是p_INT是真的重定义类型,所以x、y、z都为int型指针。

2  替换一个函数或表达式

	PT PT

替换内容见第一段代码。

3 嵌套宏替换:不用循环的1000个helloworld

C

宏的意义:增加可读性

4 定义有参数的宏

定义能够计算任意类型数组长度的宏

	int arr[] = { 1,2,3,4,5,6,7,8 };
	printf("\n%d\n", sizeof(arr) / sizeof(arr[0]));
	printf("%d\n", sizeof(arr) / sizeof(int));
	double ad[] = { 7.1,2.2,3.4 };
	printf("%d\n", sizeof(ad) / sizeof(ad[0]));
	printf("%d\n", sizeof(ad) / sizeof(double));

	printf("%d\n", ARR_LEN(arr));
	printf("%d\n", ARR_LEN(ad));
	printf("%d\n", ARR_LEN2(arr,int));
	printf("%d\n", ARR_LEN2(ad,double));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员懒羊羊

多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值