c语言inline不起作用,C语言inline内联函数学习小结

//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。

//要成为inline函数必须具备以下几点:

//1、函数代码很短,通过不超过10行

//2、函数内不能出现循环、递归、switch...case

//3、需要在编译的时候开启优化选项-O

//否则加上inline修饰,编译器也会视而不见

//强制inline宏

#define __inline__attribute__((always_inline))

//inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有static修饰,放在static的前后都可

//inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样

内联函数与宏的区别在于:宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查;内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查;内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,这一点与宏替换很相似;内联函数有参数,有返回值;由于内联函数可以像宏一样被展开,所以调用内联函数的时候,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销;这就是内联函数的优越于宏的地方;

内联函数的声明和内联函数的函数体的定义必须在一起;下面声明内联函数的语句是无效的:inline int Max(int a, int b);

而下面的内联函数的定义是有效的:

inline int Max(int a, int b){return ((a > b) ? a : b)};(c 语言声明)

C++类的成员函数也可以被定义为内联函数;比如:

class Student

{

private:

int nID

int nAge;

float fScore;

public:

void setID(int nid){ nID = nid; } //该成员函数默认自动为内联函数(隐式定义内联函数)

int getID(void){ return nID; } //该成员函数默认自动为内联函数(隐式定义内联函数)

inline void setAge(int nage) { nAge = nage; } //显式定义内联函数

inline int getAge(void) { return nAge; } //显式定义内联函数

void setScore(float fscore); //类定义体内没有声明为内联函数;

float getScore(void); //类定义体内没有声明为内联函数;

}

inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数;

inline float Student::getScore(void) { return fScore; } //类定义体外实现为内联函数;

C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是否有关键字inline,比如:setID()、getID()、setAge()、getAge();也可以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而其实现是在类定义体外部,比如:setScore()和getScore();

即便是可以把实现在类定义体外部的成员函数定义为内联函数,那该成员函数的实现也必须写在声明类定义体的哪个头文件(.h)中,不能违反规则;即:内联函数的定义和实现都必须在同一个头(.h)文件中;

内联函数的局限性:

1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,内联函数的函数体代码不宜过大,一般就是3---4行代码即可;

2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python数据挖掘主要特点_python数据挖掘(从数据集中抽取特征)

大多数数据挖掘算法都依赖于数值或类别型特征,从数据集中抽取数值和类别型特征,并选出最佳特征。 特征可用于建模, 模型以机器挖掘算法能够理解的近似的方式来表示现实 特征选择的另一个优点在于:降低真实世界的复杂度&#xff0c…

php_mysql注入load_file()IIS配置文件获取

php_mysql注入load_file()IIS配置文件获取先看一个注入点: http://www. .cn/news_detail.php?newsid-1unionselect1,2,3,4,5,6,concat(database(),0x5c,user(),0x5c,version()),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27得到回显:fli…

layui 鼠标移入变为小手_游戏技术上不去?看看外设选对没!鼠标篇

古有“人靠衣服,马靠鞍,先看长相,再看穿”的说法,现在在游戏里也有“外设选的好,游戏输不了!”这种言论。虽然这种说法过于绝对,但是一款好的外设,确实可以增加我们胜利的概率。今天…

python分支语句_Python中分支语句与循环语句实例详解

前言 本篇博文介绍一下Python中的if条件语句、while循环语句、for in循环语句以及break和continue控制关键字。 分支的基本语法 if 条件表达式: 语句1 语句2 语句3 ...... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意if后面的出现的语…

用c语言编程减法计算,求用C编个大数加减法运算程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼只写过加法的&#xff0c;杭电的A B Problem (II)(AC)&#xff1a;#include #include #include #define N 3000int main(void){int n, i, j, k, p, q, a, b, t, up;char s[N];scanf("%d ", &n);for (i 0; i < n…

creator图片循环显示_江淮宣传车厂家价格 图片 配置

国六 江淮宣传车配置&#xff1a;整车型号:CLW5040XXCH6整车尺寸:5995*2190*2970【底盘配置】轴距:3365发动机:全柴120马力排量:2.0L轮胎:7.00R16其它:助力&#xff0c;空调&#xff0c;电动门窗&#xff0c;中控锁&#xff0c;ABS&#xff0c;气刹江淮康铃H5宣传车图片江淮宣传…

BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )

MST...一开始没注意-1结果就WA了... ----------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>#include<iostream>#define r…

python字符串格式化_Python3 字符串格式化

字符串的格式化方法分为两种&#xff0c;分别为占位符(%)和format方式。占位符方式在Python2.x中用的比较广泛&#xff0c;随着Python3.x的使用越来越广&#xff0c;format方式使用的更加广泛。 一 占位符(%)%d 实例(Python3.0)&#xff1a; age 29 print("my age is %d&…

垂直串联六关节机器人调试手册_不止下棋能赢你!新型协作机器人样样精通

重庆网络广播电视台记者 余韬2019中国国际智能产业博览会上&#xff0c;各具特色的智能制造装备和机器人纷纷亮相。其中一款能和人下象棋的机器人吸引了大批观众的目光&#xff0c;大家都抢着要跟机器人“一决高下”。“机械手上有视觉辨识系统&#xff0c;识别出放象棋的位置之…

蓝桥杯c语言a组2015,2015第七届蓝桥杯决赛C语言A组--穿越雷区(DFS)

X星的坦克战车很奇怪&#xff0c;它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转&#xff0c;否则将报废。某坦克需要从A区到B区去(A&#xff0c;B区本身是安全区&#xff0c;没有正能量或负能量特征)&#xff0c;怎样走才能路径最短&#xff1f;已知的地图是一个…

nil,Nil,NULL,NSNull

nil&#xff1a;指向oc中对象的空指针 Nil&#xff1a;指向oc中类的空指针 NULL&#xff1a;指向其他类型的空指针&#xff0c;如一个c类型的内存指针 NSNull&#xff1a;在集合对象中&#xff0c;表示空值的对象 NSURL *url nil&#xff1b;Class class Nil&#xff1b;int …

c int转char数组_C语言 指向数组和字符串的指针

实例1我们在pointer_test.c的文件中写一个test2()函数&#xff0c;我们定义一个有3个元素的字符数组初始化值分别为&#xff0c;’A’, ’B’, ’C’&#xff0c;然后定义一个字符指针pc&#xff0c;把数组ca的首地址复制给字符指针pc,然后通过访问指针变量pc,来读取指针变量pc…

python代码画小狗_程序员教你用代码手绘一只可爱的小狗,正好拿去送给女朋友给她个惊喜...

最近经常在抖音上刷到会画画的大神给小姐姐手绘各种可爱的小动物&#xff0c;非常的哇塞哦~ 作为程序员的我那是羡慕不已啊&#xff01;我要是学会这招是不是可以尝试给我心仪很久的女神告白了&#xff1f;女神没准会很开心&#xff01;&#xff08;好吧&#xff0c;我承认我是…

三个用户在同一系统中同时对他们的c语言,杭州电子科技大学学生考试卷2013年操作系统试卷(2份,有答案)...

内容简介&#xff1a;杭州电子科技大学学生考试卷2013年操作系统试卷(2份&#xff0c;有答案)杭州电子科技大学学生考试卷(A )卷一、判断题(共10分,每小题1分&#xff0c;正确的打√&#xff0c;错误的打)1&#xff0e;分布式操作系统和网络操作系统都是建立在网络的基础之上&a…

ASP.NET方面的一些经典文章收集

1. 在ASP.NET中执行URL重写 文章地址&#xff1a;https://msdn.microsoft.com/zh-cn/library/ms972974.aspx 2. 在ASP.NET中如何实现和利用URL重写 文章地址&#xff1a;http://tech.it168.com/msoft/2008-01-08/200801080919796.shtml 3. Log4Net使用指南 文章地址&#xff1a…

如何修改emcp的sn号_百家号领域选择错误怎么办?百家号怎么更改领域?

我之前就强调过&#xff0c;做自媒体运营&#xff0c;正式开始之前&#xff0c;先做好定位&#xff0c;选好自己擅长的或者感兴趣的细分领域&#xff0c;这样才能保证以后能长期做&#xff0c;保证内容的输出量。很很多新人听说自媒体能赚钱&#xff0c;就直接进来了&#xff0…

apache根据ip分发_腾讯广告进入“IP新融点”时代

文 | 若谷广告业务增长放缓&#xff0c;会员数量持增&#xff0c;爆款内容产品难遇&#xff0c;品牌方需求升级&#xff0c;在这样现实情境下&#xff0c;传统营销模式亟待升级&#xff0c;腾讯广告就此进行了一次综合性的变革&#xff0c;以IP新融点方式进行应对这一现实挑战。…

分治法求数组最大值 c语言,使用分治法求最大子数组的下标。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includeint max(int a[],int left,int right);int maxcross(int a[],int left,int right,int middle);int xyzleft,xyzright;int main(){int T;int asd;int num[100000];scanf("%d",&T);while(T--){scanf("%d&…

eclipse下创建Maven项目

1.选择创建Maven项目&#xff0c;选择不适用骨架形式&#xff08;Creat a simple project&#xff09; 如图&#xff1a; 2.packing选择war的形式 如图&#xff1a; 由于packing是war形式&#xff0c;那么下面就出现了webapp的目录 3.由于我们要用eclipse把项目发布到tomcat…

git add remote_最全的git常用命令(建议收藏)

一、 Git 常用命令速查git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git192.168.1.119:ndshowgit push origin maste…