【C语言天天练(二一)】内联函数
引言:调用函数时,一般会由于建立调用、传递參数、跳转到函数代码并返回等花费掉一些时间,C语言的解决的方法是使用类函数宏。在C99中,还提出了第二种方法:内联函数。
内联函数:把函数变为内联函数将建议编译器尽可能高速地调用该函数,至于建议的效果则由实现来定义。因此,使函数变为内联函数可能会简化函数的调用机制,但也可能不起作用。内联函数是通过编译器来实现的,而宏则是在预编译的时候替换。
创建内联函数方法:在函数声明中使用函数说明符inline。
内联函数的特点:
1、类似于宏,编译器在看到内联函数声明时,就会在使用内联函数时用函数体取代函数调用,其效果就如同在此处键入了函数体的代码。如:
源代码:
#include <stdio.h>
inline void eatline() //内联函数的定义
{
while(getchar() != '\n')
continue;
} int main()
{
eatline(); //函数调用
}
通过编译器编译事实上的效果例如以下:
#include <stdio.h>
inline void eatline() //内联函数的定义
{
while(getchar() != '\n')
continue;
} int main()
{
while(getchar() != '\n')
continue;
}
2、内联函数没有预留给它的单独代码块,所以无法获得内联函数的地址。
3、内联函数不会在调试器中显示。比方上面的函数即使使用了gcc -g 选项进行了编译,通过gdb调试时,也不会有eatline函数。
4、内联函数应该是比較短小。对于非常长的函数,调用函数的时间少于运行函数主体的时间;此时,使用内联函数不会节省多少时间。
5、内联函数的定义和对该函数的调用必须在同一文件里,即内联函数具有内部链接。在多个文件程序中,每一个调用内联函数的文件都要对该函数进行定义。达到这个目标的简单方法为:在头文件里定义内联函数,并在使用该函数的文件里包括该头文件。
6、与C++不同,C同意混合使用内联函数定义和外部函数定义。由于定义的内联函数仅仅能在本文件里使用,而定义的外部函数,却能够通过extern进行外部声明,在其它文件里使用。如:
//file1.c
inline double square(double);
double square (double x) { return x * x; }
//file2.c
extern double square(double);
double square (double x) { return x * x; }
//file3.c
extern double square(double);
int main()
{
double kw = square(w);
}
当中file1.c中使用的double函数时本文件里定义的内联函数,而在file2.c和file3.c中使用的double函数确实file2.c中定义的外部函数。
【C语言天天练(二一)】内联函数的更多相关文章
- 特殊用途语言特性——默认参数、内联函数和constexptr函数
1 默认实参 某些函数有这样一些参数,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 我们可 ...
- 嵌入式C语言自我修养 10:内联函数探究
10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- C语言中宏定义与C++中的内联函数
一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译. 1,无参数宏定义和有参数宏定义 (1)宏定义不能加分号,比如:#define PI 3.24;错的,#define PI 3.24 ...
- c++学习笔记(2)类的声名与实现的分离及内联函数
一.类的声名与实现的分离: 和c函数声明与实现分离类似 有.h : 类的声明 .cpp : 类的实现 在在一个类的cpp中应该包含本类的.h文件 在cpp中类的使用:例: //Circle类 //Ci ...
- 内联函数 inline
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- 内联函数 —— C 中关键字 inline 用法解析
一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...
- 内联函数inline的用法
一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗.为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...
- 函数新特性、内联函数、const详解
一.函数回顾与后置返回类型 函数定义中,形参如果在函数体内用不到的话,则可以不给形参变量名字,只给其类型. 函数声明时,可以只有形参类型,没有形参名 把函数返回类型放到函数名字之前,这种写法,叫前置返 ...
- [C++] inline内联函数使用方法
C++支持内联函数,目的是为了提高函数的执行效率,类似于C语言中的宏定义 内联函数在调用时将它在程序中的每个调用点展开,不用额外分配栈空间 内联函数的定义在一个源文件中出现一次,但在多个源文件中可以同 ...
随机推荐
- 【转】linux 必须掌握的60个命令
Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令.要 ...
- iOS适配:Masonry介绍与使用实践:快速上手Autolayout
随着iPhone的手机版本越来越多, 那么对于我们广大的开发者来说就是很悲催,之前一直使用代码里面layout的约束来适配, 现在推荐一个第三方Masonry,上手块,操作简单,只能一个字形容他 “爽 ...
- 用PHP添加购物商品
<?php session_start(); header ( "Content-type: text/html; charset=UTF-8" ); //设置文件编码格式 ...
- 根据select不同的选项实现相应input框添加项的显示
实现效果: @1.单击包时,显示包时的添加项 @2.单击包里程,显示包里程的添加项 二 代码实现: 给select添加change事件 获取当前select的value 根据value判断对象显示其 ...
- PHPCMS V9调用时间标签 |日期时间格式化
PHPCMS V9 如何调用时间标签,下面分享常见的调用时间标签 |日期时间格式化 1.日期时间格式化显示: a标准型:{date('Y-m-d H:i:s', $rs['inputtime'])} ...
- ASP.NET MVC 过滤器Filter
在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地化与国际化设置 实现动态Action Filter是一种声明式编 ...
- MAC OSX使用篇
前述: 从windows平台切换到osx平台,的确没能一下子适应过来,在使用过程当中遇到了很多问题. link1:osx卸载应用程序的四种方法 link2:(推荐看)开始使用Mac OS X——写给M ...
- 应用SecureCRT(发送接收文件)
使用 SecureCRT 和 cz. sz,可以从 Linux 服务器上下载/上传文件. Linux 上要安装 lszrz 包 (1)编译安装root 账号登陆后,依次执行以下命令 cd /tmp w ...
- 登录远程SQL服务器
一 看ping 服务器IP能否ping通. 这个实际上是看和远程sql server 2000服务器的物理连接是否存在.如果不行,请检查网络,查看配置,当然得确保远程sql server 2000服务 ...
- A Statistical View of Deep Learning (III): Memory and Kernels
A Statistical View of Deep Learning (III): Memory and Kernels Memory, the ways in which we remember ...