请教define,const,typedef,inline的区别
来源:互联网 发布:ssh酒店管理系统源码 编辑:程序博客网 时间:2024/06/07 22:40
宏:
优点:在编译预处理阶段完成,不占用编译时间,同时,省去了函数调用时间,运行效率高。
缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得出错误的结果。
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。
宏没有生存期、作用域之类的概念,而函数就有。
函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。
优点:在编译预处理阶段完成,不占用编译时间,同时,省去了函数调用时间,运行效率高。
缺点:不进行类型检查,多次宏替换会导致代码体积变大,而且由于宏本质上是字符串替换,故可能会由于一些参数的副作用导致得出错误的结果。
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。
宏没有生存期、作用域之类的概念,而函数就有。
函数在运行过程中会在栈中产生函数调用过程活动记录,而宏则没有。
- 请教define,const,typedef,inline的区别
- define与const、inline、typedef的区别
- const、#define、typedef和inline的区别
- C++中 #define与const、inline、typedef的区别
- C++中 #define与const、inline、typedef的区别
- #define,const,typedef的区别
- #define、const、typedef的区别
- #define、const、typedef的区别
- #define、const、typedef的区别!!!
- #define、const、typedef的区别
- const、define、typedef的区别
- 区别const、#define、typedef
- const\#define\inline的特点及区别
- const, static, define 以及inline的区别
- #define 和 #typedef , const的区别
- static define const inline的产生背景与区别
- C++中#define、typedef和const的区别
- #define、const、typedef的差别
- CG Independent Study PCL learn PCL 01 what is it?
- 查看当前人的前面还有几人 SQL
- 时钟芯片DS1302可靠起振的方法
- 开源资源大汇总(C#)
- 成功人士都是这样逼出来的
- 请教define,const,typedef,inline的区别
- 批判性思维真的这么重要吗?
- 系统广播大全,附带引号,方便调用
- 知其所以然地学习(以算法学习为例)
- 软件开发人员怎样走好从技术到管理之路?
- PL/SQL编程
- 【IOS】开源项目汇总(更新时间2012-6-11)
- dotnetCharting.WinForms 7.0 破解
- Windows Phone 读取文本文件