博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事(转)
阅读量:6703 次
发布时间:2019-06-25

本文共 1411 字,大约阅读时间需要 4 分钟。

转自:http://blog.jobbole.com/73095/

五、显式内联

(想让)函数代码被直接集成到调用函数中,而非产生独立的函数目标和单个调用,可显式地使用 inline 限定符来指示编译器这么做。根据  inline 限定符仅建议编译器使得”调用要尽可能快”,并且“此建议是否有效由具体实现定义”

要用内联函数优点的最简单方法是把函数定义为 static ,然后将定义放入头文件。

/* middle.h */static inline int middle(int a, int b){    return (b-a)/2;}

 

独立的函数对象仍然可能被导出,但在翻译单元的外部它是不可见的。这种头文件被包含在多个翻译单元中,编译器可能为每个单元发射函数的多份拷贝。因此,有可能两个变量指向相同的函数名,指针的值可能不相等。

另一种方法是,既提供外部可连接的版本,也提供内联版本,两个版本功能相同,让编译器决定使用哪个。这实际上是内嵌限定符的定义:

If all of the file scope declarations for a function in a translation unit include the inline function specifier without extern, then the definition in that translation unit is an inline definition. An inline definition does not provide an external definition for the function, and does not forbid an external definition in another translation unit. An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit. It is unspecified whether a call to the function uses the inline definition or the external definition.

在一个翻译单元中,若某个函数在所有的文件范围内都包含不带extern的内联函数限定符,则此翻译单元中此函数定义是内联定义。内联定义不为函数提供外部的定义,也不禁止其他翻译单元的外部定义。内联定义为外部定义提供一个可选项,在同一翻译单元内翻译器可用它实现对函数的任意调用。调用函数时,使用内联定义或外联定义是不确定的。

(译者注:即gcc中的 extern inline,优先使用内联版本,允许外部版本的存在)

对于函数的两个版本,我们可以把下面的定义放在头文件中:

/* middle.h */inline int middle(int a, int b){    return (b-a)/2;}

 

转载于:https://www.cnblogs.com/pengyingh/articles/5796393.html

你可能感兴趣的文章
c# 扩展方法奇思妙用高级篇五:ToString(string format) 扩展
查看>>
MyEclipse/Eclipse 中使用javap
查看>>
docker registry v2与harbor的搭建
查看>>
求二叉树的高度
查看>>
TCP三次握手及四次挥手详细图解(转)
查看>>
数据结构02-链表
查看>>
UWP学习记录
查看>>
Matrix Computations 1
查看>>
C#中几种数据库的大数据批量插入
查看>>
[flask]gunicorn配置文件
查看>>
牵丝戏
查看>>
OC-封装、继承、多态
查看>>
改需求
查看>>
linq中let关键字学习
查看>>
Java并发编程(多线程)中的相关概念
查看>>
6-14 数据库高级
查看>>
[QNAP crontab 定時執行程式
查看>>
listView当中有嵌套了有onClickListener的控件时ListView自身的onItemClick无响应的解决方案...
查看>>
本地浏览器缓存sessionStorage(临时存储) localStorage(长期存储)的使用
查看>>
python面试题目
查看>>