使用enum、const、inline替换#define的原因

1、#define只是简单的替换,不会进行参数的检查,容易出现错误,当然这是众所周知的;

2、#define不属于语言的一部分,在预编译过程中预编译器会将所有的宏替换掉,例如#define MAX_LEN 100 预编译器处理后,所有使用MAX_LEN的地方都被换成了100,也就是说编译器并没有看见MAX_LEN,MAX_LEN也并没有进入记号表symbol table中,当程序中运用MAX_LEN出现一个编译错误时,错误的提示就会是100,这个时候你就会有点摸不着头脑了,100是什么鬼。。。于是你会浪费很多时间去追踪它;

顺便提一句内联函数,内联函数定义应该尽可能的简短,简单,不应该出现循环体或者switch语句,因为实际上内联函数也有点类似于宏替换,凡是调用到该函数的地方都被直接用该函数体替换了,所有内联函数的执行步数应该是清晰可见并且可确定的,但实际上,即使你声明了一个内联函数如果定义并不满足内联函数的规则那么编译器也并不会将它当做内联函数看待,如果你声明了一个普通函数但满足内联函数的规则,编译器会自动将其内联,所以用inline声明一个内联函数对现在的编译器来讲已经没有多大的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值