C语言预处理

目录

什么是预处理

#define定义常量

什么是宏定义常量

宏定义常量的好处 

#define定义宏

带有副作用参数的宏

宏替换的规则

宏函数的对比

#和##

宏的命名

#undef

命令行定义

条件编译

头文件的包含

其他预处理指

什么是预处理

C语言里的预处理,简单来说就是在真正开始编译你的源代码之前,有个特殊的“预备队”先上场,帮你把原始代码整理得更规整、更适应编译器的要求,同时也让你编程时能更方便、更灵活。这个“预备队”就是预处理器,它干的活儿是在编译流程的最前端单独进行的,比检查语法、理解代码含义那些步骤还要早。

#define定义常量

什么是宏定义常量

在编程中我们经常会用到一些常量,比如圆周率的值,最大最小值,长度宽度等,这些变量伴随我们的整个程序,我们就可以用一个宏来替换,例如:

#define PI 3.1415926
#define MAX 100
#define MIN 0
#define ROW 10
#define COL 10

宏定义常量的好处 

在编程实践中,我们时常会遇到一些常数,它们如同程序的脉络一般,贯穿于各个角落,对算法逻辑、数据结构乃至系统行为产生深远影响。然而,当需要调整这些常数时,问题便凸显出来:我们必须逐一排查并手动修改它们在源代码中每一次出现的位置,这无疑是一项既繁琐又易出错的任务,极大地降低了工作效率,且不利于代码维护。

此时,宏定义常量的优越性便显现无遗。借助宏定义,我们只需在一处为这些常数赋予新的名称和值,随后在整个程序中以宏名代替实际数值。一旦宏的值发生变更,预处理器便会以“魔法之手”般的力量,悄无声息地将所有引用宏之处更新为新的值。如此一来,改动一处,全局皆变,省却了在代码汪洋中寻觅与替换的辛劳,极大地提升了调整常数的效率,也确保了改动的一致性与准确性。

总结来说,宏定义常量犹如一把精巧的钥匙,解锁了高效管理贯穿程序全局常数的难题。它以一处定义、处处生效的方式,简化了常数修改的过程,避免了人工逐行排查的困扰,确保了代码的整洁与维护性,堪称提升编程效率与代码质量的得力助手。

#define定义宏

我们学过函数,但你知道宏也可以实现类似函数的功能吗?

例如,我们想要计算一个数的平方,除了用函数以外,我们还可以用宏来完成这个功能,例如:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

#define SQRT(x) ((x)*(x))

int main()
{
	printf("%d", SQRT(5));
	return 0;
}

像这样我们就可以实现一个数的平方操作,也就是将x等量替换成5

注意事项 

需要注意的是,宏和函数不同,这个在下面我们也会继续讲到

宏仅仅只是简单的替换,他不会根据你想的意思去执行命令,比如如果你在定义宏的时候是这么定义的:

#define SQRT(x) x*x

而如果这时x的值为3+3,那么在宏替换的时候就会变成这样:

3+3*3+3

其结果是 15,这很显然不是我们想要的结果,注意宏替换只是简单的替换,所以我们在使用宏的时候一定要注意多加括号,否则可能会造成不必要的损失

带有副作用参数的宏

我们看看下面两个例子:


                
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿梦Anmory

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值