b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C ++中的宏和内联函数

电脑杂谈  发布时间:2020-06-24 21:06:31  来源:网络整理

c++ 内联函数_c/c++函数与算法速查手册_c#调用c托管的c函数

1个宏定义

C ++是C的超集. C++继承了C的一项重要功能,即效率. 宏是提高C语言中程序运行效率的重要手段. 可以在不使用普通函数的情况下调用宏,但可以像使用普通函数一样使用宏. 宏的实现使用预处理器而不是编译器,因此没有时间花费在参数调用,生成汇编语言CALL,返回参数和执行汇编语言RETURN上,从而大大提高了程序执行效率. 当然,这种方法也可以用来提高C ++中程序的执行效率.

示例:

#include <iostream.h>

#define doub(x)x * 2

int main()

{

for(int i = 1; i <= 3; i ++)

cout << i <<“翻倍是” << doub(i)<< endl;

cout <<“ 1 + 2翻倍是” << doub(1 + 2)<< endl;

c++ 内联函数_c#调用c托管的c函数_c/c++函数与算法速查手册

返回0;

}

运行程序的结果是:

1翻了一翻2

2翻了一番4

3翻了一番6

1 + 2翻了一番5

当程序运行到cout << i <<“ doubled is” << doub(i)<< endl;并且cout <<“ 1 + 2doubled是” << doub(1 + 2)<< endl; ,直接在程序中直接扩展由宏定义的代码c++ 内联函数,从而节省了函数调用的成本,大大提高了程序的执行效率.

2个内联函数

在C ++中,在函数描述之前,使用关键字“内联”将函数声明为内联函数. 它具有与宏定义相同的功能和相似的机制. 调用内联函数时,C ++编译器使用函数主体中的代码替换函数调用表达式,从而减少了函数调用的开销并加快了程序的速度. 实施.

示例:

c/c++函数与算法速查手册_c++ 内联函数_c#调用c托管的c函数

#include <iostream.h>

内联浮动圆(float r)

{return 3.1416 * r * r;}

int main(){

for(int i = 1; i <= 3; i ++)

cout <<“ r =“ << i <<” area =” <<圆(i)<< endl;

返回0;

}

运行程序的结果是:

r = 1区域= 3.1416

r = 2区域= 12.5664

c/c++函数与算法速查手册_c++ 内联函数_c#调用c托管的c函数

r = 3区域= 28.2744

当程序运行到cout <<“ r =” << i <<“ area =” << circle(i)<< endl;时,已定义的内联函数将直接在程序中扩展,从而减少了普通函数调用程序的开销提高了程序执行的效率. 这与宏定义非常相似,但是两者并不完全相同,并且有非常重要的区别.

3两者之间的区别

对于上面的第二个示例,使用内联函数和宏定义,程序运行的结果应该相同,那么它们之间有什么区别?让我们再次研究上面的第一个示例. 尽管宏定义在外观和行为上与函数调用相同,但是当出现细微差别时会出现问题. 例如c++ 内联函数,对于第一个示例,程序定义的宏是完成乘以2的功能,然后分析程序操作的结果,我们可以看到前三个结果是正确的,但是第四个结果是不同的从期望值. 预期结果应为6,但实际结果为5,导致问题的原因是编译器将输出以下语句: cout <<“ 1 + 2doubled is” << doub(1 + 2)<< endl;解释为cout <<“ 1 + 2 doubleed是” << 1 + 2 * 2 << endl;它更改了我们最初期望的运算符的优先级顺序,因此结果不是我们预先期望的,程序是执行结果为5. 从此示例可以看出,宏定义本身具有一定的不安全性,有时还包含难以发现的隐藏错误. 相反,如果此示例使用内联函数完成,则实验证明该程序操作的结果为:

1翻了一翻2

2翻了一番4

3翻了一番6

1 + 2翻了一番6

通过此示例,我们可以看到内联函数和宏定义之间的区别. 内联函数消除了宏定义中潜在的不安全性

因此,大多数程序员在编写程序时很少使用宏定义.

4个结论

c++ 内联函数_c/c++函数与算法速查手册_c#调用c托管的c函数

让我们研究这种差异的根本原因. 宏定义由预处理器实现,内联函数由编译器实现. 正是这种差异导致上述程序以不同的方式运行. 宏定义的关键问题是我们可能认为预处理器的行为与编译器的行为相同,因此在使用过程中很容易混淆.

[参考文献]

[1]王菊英. 当前我国利率趋势研究[J]. 经济学家,2003,(05)

[2]刘芳芳. 建立学习型企业之我见[J]现代管理科学,2004,(04)

[3]任美娇. 浅谈合作探究的教学模式[J]. 浙江工商职业技术学院学报,2003,(02)

[4]齐善红. 分工与整合的逻辑与趋势-企业两权分工与整合的研究与思考[J]. 运筹与管理学报,2006,28(2): 155-159理论与现代化,1999,(01)

[5]杨则正. 赛门铁克的C ++ 8.0编译器[J]. 管理科学文摘,1998,(11)

[6]杨帆. 关键词: 内联函数,宏,C ++科技咨询指南,2007,(01)

[7]郑然然. 企业营销伦理研究[J]. 江苏商业评论,2005,(07)

[8]付玉刚. 网络名人: C ++之父——Stroustrup [J]. 教育与职业,2003,(18)

[9]杨勇. 我国独立董事化探索[J]. 经济前沿,2005,(06)

[10]陈永强. 电子商务概论课程大纲的研究[J]. 杭州师范学院学报(医学版),2005年,

[11]]“ C ++语言和面向对象程序设计教程”,陈伟兴,林小茶,清华大学出版社2000年版. 1


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-257221-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...