本文探讨了宏在C语言与C++中的不同应用,并详细解释了宏的四个主要用途。此外,还对比了宏与const及内联函数的区别,强调了内联函数在类型检查与执行效率方面的优势。

宏在C语言里及其重要而在C++里用的就少多了。宏的第一规则是绝不应该去使用它,除非你不得不这样做

宏的主要用途:

>定义“常量”。

>定义类似函数的结构。

>改进语法。

>控制条件编译。

*注意:在宏的定义中,使用任何参数时都应将其置于括号之中。

#define MAX(x,y) ((x)>=(y)?(x),(y))

 

const与#define的对比:

C++语言可以用const定义常量,也可以用#define定义常量,但前者比后者有更多优点。const常量有数据类型,而宏常量没有数据类型,编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查。并且在字符替换中可能会产生意想不到的错误。在C++中const常量可以完全取代宏常量。

 

内联函数和宏定义:

内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。内联函数要做参数类型检查,这是它跟宏相比的优势。内联函数比宏更安全。

宏是在代码处不加任何验证的简单替换,而内联函数是将代码直接插入调用处,而减少了普通函数调用时的资源消耗。

宏不是函数,只是在编译前(编译预处理阶段)将程序中有关字符串替换成宏体。

 

内联函数一般只用于如下情况:

>一个函数不断被重复调用,且函数只有简单的几行,函数内不包含for,while、switch语句。

内联是以代码膨胀为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。

 

以下情况不宜使用内联:

>函数体内的代码比较长,使用内联将导致内存消耗代价较高。

 

关键字inline必须与函数定义体放在一起才能使函数成为内联。仅将inline放在函数声明前不起任何作用。

 

 

                                                                 摘自《程序员面试宝典》第四版、《C++程序设计原理与实践》

 

转载于:https://www.cnblogs.com/summerdreamer/p/6537305.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值