宏和内联的比较

原创 2016年06月01日 17:07:04

c++中强制建议用const替代宏常量,用内联函数替代宏函数,这是为何?

一.宏
首先我们来看下宏的优缺点:
优点:增强代码的复用性,提高性能
缺点:不方便调试(因为在预编译阶段就进行了替换)
可读性差,可维护性差,容易误用。
没有类型安全的检测。

例:

#define ADD( a, b ) a + b
void Test ()
{
     int a = 2;
     int b = 3;
     int c = 4;
     int ret = ADD( a, b );
     cout<<"a + b:" <<ret<< endl;
     ret = ADD (a, b) * c ;
     cout<<"(a + b) * c:" <<ret<< endl;
}

二.内联和const
首先我们来看一下内联的定义:
以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。

优点:const和内联函数在进行编译时不仅进行替换,而且还会进行参数类型检测,提高了程序的安全性。内敛函数可以是普通函数,也可以是类的成员函数;函数式宏不能作为类的成员函数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

inline内联函数和宏的区别

1、内联函数在编译时展开,而宏在预编译时展开 2、在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。 3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具...
  • u013321328
  • u013321328
  • 2014年02月24日 19:43
  • 966

内联函数和宏定义的总结

内联(inline)函数,不同于普通函数的是:普通函数是在编译是和调用者分别编译,运行到调用处时,将原函数的信息入栈,新函数执行。而内联函数,在编译时就直接把调用函数语句替换为整个内联函数代码(变量名...
  • coderwj
  • coderwj
  • 2016年03月30日 23:18
  • 450

C++中宏定义和内联函数区别

1. 宏代码不是函数
  • cgl1079743846
  • cgl1079743846
  • 2014年05月27日 00:45
  • 2418

C++宏,普通函数,内联函数的运行速度以及三者的差异

下面论证一下:c/c++中 运行速度对比,宏>内联函数>普通函数 首先简单的代码验证下: #include "stdafx.h" #include #include #define ...
  • arxobject
  • arxobject
  • 2016年08月11日 23:46
  • 685

C++ CONST_内联函数

CONST: int me; const int* p1 = &me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向 int* const p2...
  • lwljava
  • lwljava
  • 2014年07月18日 16:42
  • 630

宏和内联

宏和内联 (1)在C 程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来象函 数。预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL 调用、...
  • mist99
  • mist99
  • 2014年04月28日 18:01
  • 276

比较两个数大小的宏

1、#define MAX(a,b) (((a) > (b)) ? (a) : (b)) 2、#define MAX(a,b) (((((a) - (b)) >> 31 ) & 0x1) ? (a) ...
  • changbaolong
  • changbaolong
  • 2013年10月07日 14:29
  • 1814

解决内联样式比类选择器优先级高的问题

由于内联样式的级别比类选择器的级别高,我现在有一个商品规格默认的样式是: .pro-color p a { border:1px solid #bfbfbf; border-radi...
  • fmwind
  • fmwind
  • 2016年08月10日 17:46
  • 829

java final方法与java内联函数

《java编程思想》中讲到final方法时提到,使用final方法原因有两个, 一、锁定方法。防止任何继承类修改、覆盖 二、效率。在java早期实现中,如果将一个方法指明为final,就是同意编译...
  • Rflyee
  • Rflyee
  • 2016年04月05日 19:28
  • 5351

宏和内联inline函数

宏是由由预处理器preprocessor处理的. inline函数是由编译器compiler处理的. 宏      没有类型检测 直接替换           预处理器不能访问类...
  • Vast_Sea
  • Vast_Sea
  • 2012年10月31日 16:10
  • 345
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:宏和内联的比较
举报原因:
原因补充:

(最多只允许输入30个字)