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

宏的主要用途:

>定义“常量”。

>定义类似函数的结构。

>改进语法。

>控制条件编译。

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

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

 

const与#define的对比:

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

 

内联函数和宏定义:

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

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

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

 

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

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

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

 

以下情况不宜使用内联:

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

 

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

 

 

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

 

posted @ 2017-03-12 11:16  手可摘星晨  阅读(273)  评论(0)    收藏  举报