C语言inline函数使用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、简述:

inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。

在函数声明或定义中函数返回类型之前加上关键字inline。

比如:inline int min(int first,int second){ /***********/ };


对于同一个程序的不同文件,如果inline函数出现的话,其定义必须相同。如果定义不相同,程序将会出现未定义的行为。

为保证不会发生这样的事情,建议把inline函数的定义放到头文件中。在每个调用该inline函数中包含该头文件。这种方法保证对每个inline函数只有一个定义,且程序员无需复制代码,并且不可能在程序的生命期中引起无意的不匹配的事情。


二、内联函数的编程风格

1)、关键字inline必须与函数定义体放在一起才能使得函数称为内联。仅将inline放在函数声明前面不起任何作用。   <高质量C/C++编程指南>

如下风格的函数Foo 不能成为内联函数:
inline void Foo(int x, int y);  // inline 仅与函数声明放在一起

void Foo(int x, int y) { } 


而如下风格的函数Foo 则成为内联函数:

void Foo(int x, int y);
inline void Foo(int x, int y)    // inline 与函数定义体放在一起 { }


2)、定义在类声明中的成员函数将自动成为内联函数

例如:

class A{

public:

void Foo(int x,int y){ }         //自动地成为内联

}

将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的习惯,应该将上例中改为:

//头文件

class A{

public:

void Foo(int x,int y);

}

//定义文件

inline void A::Foo(int x,int y)

{

}


三、慎用内联函数

以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。


在C程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但使用起来像函数。

预处理器用复制宏代码的方式代替函数调用,省去了参数压栈、生成汇编语言的CALL调用、  返回参数、执行return等过程,从而提高了速度。  
使用宏代码最大的缺点是容易出错,预处理器在复制宏代码时常常产生意想不到的边际效应。

所以,在C++中使用内联函数取代所有宏代码,除了“assert”断言。


四、总结一下:

1、inline函数不要超过10行代码,且不能包含循环、switch、if语句

2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,google推荐把inline函数定义在**-inl.h头文件中。

3、不要过度使用inline函数定义,尤其对大函数来说



c++中内联函数那点事 1 内联(inline)函数     c++在编译时可以讲调用的函数代码嵌入到主调函数中,这种嵌入到主调函数中的函数称为内联函数,又称为内嵌函数或内置函数。 定义内联函数时,在函数定义和函数原型声明时都使用inline,也可以只在其中一处使用,其效果一样。 内联函数在编译时用内联函数函数函数体替换,所以不发生函数调用,不需要保护现场,恢复现场,节省了开销... 阅读详情

相关推荐

嵌入式C基础——inline的作用

内联函数技巧声明

weixin_37620587的博客 1921

【C语言inline 关键字详解

inline关键字用于建议编译器将函数内联展开,以减少函数调用的开销。内联函数适用于简单、频繁调用的函数,能够提高程序的执行效率。

LuckiBit 3200

c语言inline函数的作用

记录一下inline函数的作用 普通函数的调用过程 在eclipse里面创建工程,代码如下: #include <iostream> #include <vector> #include <cstring> #include <cassert> #include <algorithm> using namespace std; //__attribute__((always_inline)) inline int test(int x) int

Royal2012的专栏 1306

C语言基础知识--inline(内联)关键字

C语言 inline(内联)关键字

BIN-XYB的博客 9048

内联函数 —— C 中关键字 inline 用法解析(转载)

一、什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。 栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 下面我们来看...

Eureka1024的博客 4703

c语言inline函数使用

大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也 很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过肤浅了,这里学习总结一下。   1、inline函数不要超过10行代码,且不能包含循环、switch、if语句   2、在一个c文件中定义的inline函数是不能在其它c文件中直接使用,google推荐把inline

rich369的博客 2232

C语言inline函数使用方法

C语言inline函数使用方法 2012-01-20 00:00中国IT实验室佚名 关键字:C语言   大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对

macrohasdefined的专栏 1115

C语言中__inline函数作用解释

C语言inline函数使用方法2012-01-20 00:00 中国IT实验室 佚名 ..关键字:C语言   大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也很少用到inline来定义函数,近几天在研读google的google c++ style guide,发现之前自己对inline函数的认识太过

macrohasdefined的专栏 2120

【每日一C之十三】C 语言inline内联函数

每日一C之include        每天拾一个C语言贝壳,厚积薄发,积跬步以致千里。  今日贝壳:C语言 inline内联函数的设立初衷与用法            初衷:引入inline内联函数的目的:减少函数调用的开销。在函数返回值前加限定词inline,编译器会在源文件适当的位置生成函数代码的副本,以避免函数调用。函数角度来看,相比inline,宏虽同样能

Jiangwei的专栏 3929

c语言 inline函数的总结,C语言陷阱与技巧第2节,使用inline函数可以提升程序效率,但是让inline函数生效是有条件的...

翻开 Linux 内核源代码,会发现内核在界说C言语函数时,有许多都带有 “inline”关键字,请看下图,那么这个关键字有什么效果呢?inline 关键字的效果在C言语程序开发中,inline 一般用于界说函数inline 函数也被称作“内联函数”,C99 和 GNU C 均支撑内联函数。那么在C言语中,内联函数和一般函数有什么不同呢?其实,从 inline 这个姓名就应该能看出一点它的性质了...

weixin_32349561的博客 450

【C语言内功心法】inline -- 提高函数的运行效率

记得早先少年时 大家诚诚恳恳 说一句 是一句 清早上火车站 长街黑暗无行人 卖豆浆的小店冒着热气 从前的日色变得慢 车,马,邮件都慢 一生只够爱一个人 从前的锁也好看 钥匙精美有样子 你锁了 人家就懂了 木心 – 《从前慢 》 一、inline 为何诞生? 在使用 C 语言进行编程时,如果有一些函数被频繁调用,就会不断地有函数跳转的操作,随之也会频繁带来入栈、出栈等操作,不经影响效率,还会大量占用栈等空间。 如何解决这个问题?我们可以选择用类似的代码段直接实现该函数功能,这样就不存在函数调用带来的各种问.

Eureka1024的博客 3617

C语言中把函数声明为inline是什么意思?

在 C 语言中,将函数声明为inline内联)意味着编译器将该函数的代码直接插入到调用它的地方,而不是执行常规的函数调用。这种优化可以减少函数调用的开销,如栈帧分配和参数传递,从而提高程序运行效率,尤其是对小型、频繁调用的函数inline

昊虹AI笔记 940

C语言 inline类型函数

读源程序时遇到如下代码: //*---------------------------------------------------------------------------- //* \fn AT91F_US_PutChar //* \brief Send a character,does not check if ready to send //*----...

502

C语言inline函数代码示例

//inline函数 #include <stdio.h> inline int test(int a);//声明 int test(int a) { return (a % 2 == 0) ? 1 : 2; } int main(int argc, char const *argv[]) { int i = 0; for (int i = 0; i < 20; ++i) { printf(“i : %d ji ou:%d \n”,i,test(i)); } return 0; } //

qq_54127452的博客 353

inline函数_C语言中的Inline内联函数解析

C语言中的Inline内联函数解析在C语言中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据也就是函数内数据的内存空间。那么在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题:比如函数的死循环递归调用的最终结果就是导致栈内存空间枯竭,程序崩溃。下面我们来看一个例子#in...

weixin_39732316的博客 131

C语言内联函数定义inline前加static原因

static inline

1090

【转载】 c语言inline函数使用

c语言inline函数使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inline函数之后,会省去函数调用的开销,直接嵌套汇编代码,取代函数调用,提高效率。工作后项目中也 很少用到inline来定义函数,近几天在研读google的google c++ style gui...

weixin_30325793的博客 141

c语言 inline函数的总结

<br />1  inline只是个编译器建议,编译器不一定非得展开Inline函数。<br />    例如:<br />             Inline函数地址引用<br />             inline在递归函数使用<br />   <br />2  inline必须用于函数定义,对于函数声明,inline不起作用<br />    例如:<br />     inline max(int,int);  //没有Inline作用<br />     <br />     只有 inl

YUAN1125的专栏 1万+
上一篇: 了解C声明中修饰符的顺序
下一篇: C++ 网络编程学习指南
lanhaics
博客等级 码龄14年 17粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值