宏定义

本文详细介绍了C语言中的宏定义,包括无参数和有参数的宏,以及宏替换的工作原理和注意事项。宏定义允许程序员用标识符代表字符串,预处理时进行替换,不涉及运行时开销。宏的使用可以简化代码,但可能导致代码膨胀。通过`#undef`可以限制宏的作用范围。同时,文章对比了宏与函数的区别,指出宏适合于简单的表达式替代。
摘要由CSDN通过智能技术生成

宏定义

预处理命令:预处理命令是在编译源程序钱先对源程序进行处理,预处理完成后,编译器开始编译源程序生产可执行代码,因为预处理指令不是c语言的一部分,所以每条编译预处理命令不需要以分号结束
宏定义:宏:c语言标准允许在程序中用一个标识符来表示一个字符串,标识符称为宏名,在编译预处理时,将程序中所有的宏名用相应的字符来替换,这个过程称为宏替换
无参数的宏
#define 标识符 字符串 #表示这是个预处理命令define是宏定义的关键字,标识符是宏名,字符串是宏名所替换的内容,可以是常数,表达式
宏替换是在程序中用相应的字符串来替换名,编译器预处理程序不会对他做任何检查,如果有错误,只有在编译程序的时候才会被编译器发现
习惯上宏名用大写字母,但是用小写字母也可以
宏的作用范围是从宏定义开始到本源程序文件结束为止,也可以使用#undef来提前终止
例子


#define MAX 256
int main()
{

}
#undef MAX
int f()
{

}


因为使用了#undef,使宏名MAX只在main函数中有效
可以对宏进行嵌套
#define MIN 128
#define MAX MIN*2

有参数的宏
类似与有参数的函数,一般的形式为:#define 标识符(形参表)字符串,如果有多个参数就要用都好隔开,在程序用使用有参数的宏的形式是 标识符(实参表) (这个有点像函数的调用)
注意事项:
宏名与形参表的圆括号之间不能有括号
在宏定义的时候,字符串内的形式参数最好用括号括起来

有参数的宏与函数的比较:
有参数宏的形式参数不是变量,不分配内存空间,不需要说明数据类型,儿函数的的形参是变量,要分配内存空间,在函数定义时要指明参数的数据类型
预处理程序认为有参数宏的实参是字符串,并用它去替换形参:例子a+1,在宏里面是直接替换,但是在函数里面会计算在吧这个值传递进函数里面
使用宏替换后源程序一般会变长,而函数就不会是程序变长,宏替换不会占用运行时间,只是编译的时间稍微变长一点,而函数调用就会占用运行时间,一般用宏来代表一些较为简单的表达式比较合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值