请教define,const,typedef,inline的区别

原创 2012年03月21日 18:05:35
宏:
优点:在编译预处理阶段完成,不占用编译时间,同时,省去了函数调用时间,运行效率高。
缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得出错误的结果。
PS:宏与内联函数的区别
  内联函数和宏都是在程序出现的地方展开,内联函数不是通过函数调用(中断调用)实现的,是在调用该函数的程序处将它展开(在编译期间完成的);宏则是在预编译期间做简单的替换。
  不同的是:内联函数可以在编译期间完成诸如类型检测,语句是否正确等编译功能;宏就不具有这样的功能,而且宏展开的时间和内联函数也是不同的。
#define S(a,b) a*b
area=S(3,2)
int S(int a,int b)
{ int s;
  s=a*b;
  return(s);
}
这两个有什么区别
#define S(a,b) a*b
area=S(3,2)
尽量少使用宏定义。宏定义是把S(a,b)简单地替换成a*b
这样会产生问题,最典型的:
缺括号,比如aera=S(x+y,x-y),会被替换成x+y*x-y
也就是说,宏只是编译前简单替换代码内容,而函数真正产生代码。
宏是编译期的,函数是运行期的;
宏不是实体,而函数是一个可寻址的实体;
宏只是编译期替换,在程序里每遇到S(a,b),就用a*b代替,a和b两个实体并没有由宏实际产生,而函数S会在栈中定义两个对象a和b。
宏没有生存期、作用域之类的概念,而函数就有。
函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。

常见的typedef、define、const、static使用辨析

define用法: #define为预处理命令,定义的实质:只是为后面的常量定义一个别名。该声明的结果没有具体类型,不分配内存空间。在编译时,用到别名的地方,编译器会自动把该别名替换为相应常量。每次...
  • u012160319
  • u012160319
  • 2015年01月14日 16:07
  • 854

typedef和define的详细区别

原文链接:http://developer.51cto.com/art/201104/256060.htm typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型...
  • zhangbest2009
  • zhangbest2009
  • 2015年07月21日 11:03
  • 573

C++中define与const的区别

C++中不但可以用define定义常量还可以用const定义常量,它们的区别如下: 用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常...
  • yingyujianmo
  • yingyujianmo
  • 2016年04月21日 10:20
  • 3877

C++带const、static和#define关键字的变量定义的区别

一、const  1.变量定义中    (1)const int a=10;    说明:定义的int型变量a不能被修改,只能被使用。带const关键字的变量可以定义为全局变量,但此时定义的全局...
  • xingkongfenqi
  • xingkongfenqi
  • 2015年07月04日 21:35
  • 1275

C语言中 关于const和#define的区别心得

尽量用const和inline而不用#define 这个条款最好称为:“尽量用编译器而不用预处理”,因为#define经常被认为好像不是语言本身的一部分。这是问题之一。再看下面的语句: #defin...
  • wangjun_huster
  • wangjun_huster
  • 2017年04月09日 14:44
  • 197

PHP常量详解:define和const的区别

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。通常常量标识符总是大写的。 可以用 define(...
  • aerchi
  • aerchi
  • 2014年07月14日 11:12
  • 3060

C语言里面的内联函数(inline)与宏定义(#define)探讨

http://huxiongwei.spaces.eepw.com.cn/articles/article/item/85841 C语言里面的内联函数(inline)...
  • wangyin159
  • wangyin159
  • 2014年07月08日 21:06
  • 951

const与define 优缺点比较

常量: 用宏表示常数 假如我们要写一个有关圆的种种计算的程序,那么∏(3.14159)值会被濒繁用到。我们显然没有理由去改∏的值,所以应该将它当成一个常量对待,那么,我们是否就不得不一遍一遍地写...
  • u011558786
  • u011558786
  • 2013年07月31日 10:05
  • 1457

用inline替换#define的好处

代码中可以用#define来进行类似函数之类的操作;比如可以比较两个数字的大小: #define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b)) 这样宏在代码中并不少见...
  • u013517637
  • u013517637
  • 2016年04月14日 20:00
  • 448

QObject的d_ptr成员——箭头符号的重载

箭头操作符的重载
  • tracing
  • tracing
  • 2015年11月06日 08:33
  • 1368
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:请教define,const,typedef,inline的区别
举报原因:
原因补充:

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