关于内联函数的定义问题

leboc 2008-11-14 12:25:00

内联函数应该"定义"在头文件中,与其他函数不同.

这句话,有点不能理解.

要是把内联函数"申明"在头文件中,定义在源文件中,有什么不同吗?
...全文
409 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Laura_li 2008-11-14
  • 打赏
  • 举报
回复
就是内联函数就是为了减少函数调用时的资源开销!
如果函数简单的情况下写为内联函数! 复杂就不要写为内联函数了!
还有如果函数会在很多其他的文件中被调用就写在头文件中。这样便于文件的管理和提高查找的速度。
yshuise 2008-11-14
  • 打赏
  • 举报
回复
一般简单的都是可以定义在.cpp中。
如果这个函数调用了其它的文件的函数,而这个函数又不是内联的,肯定链接通不过。
jackzhhuang 2008-11-14
  • 打赏
  • 举报
回复
内联发生在编译时,编译器仅仅是展开函数,没有调用它,这样必须声明定义都在头文件。

但不是所有时候都会这样,有时你声明内联,但仍然是属于函数调用,不会展开。
wuyu637 2008-11-14
  • 打赏
  • 举报
回复
内联函数就是把函数在调用的地方,用代码展开的形式,避免函数调用的消耗。


这样就会有一个问题,一个函数一般都是在好几个文件中被调用,c++采用的编译方式是将。h文件附加到.cpp之前编译的,如果放在.cpp文件中,就会加大
编译器的工作量和编写复杂度,(要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多
qqwx_1986 2008-11-14
  • 打赏
  • 举报
回复
没什么不一样
只要在定义的前面加上inline
记住只有在定义的是加上inline才是内联函数而只是在申明的时候加inline而定义的时候没有加inline就不是内联函数
overbai 2008-11-14
  • 打赏
  • 举报
回复
只有在定义的是加上inline才是内联函数而只是在申明的时候加inline而定义的时候没有加inline就不是内联函数
要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多

学习了!
Longinc 2008-11-14
  • 打赏
  • 举报
回复
学习
小人物- 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyu637 的回复:]
内联函数就是把函数在调用的地方,用代码展开的形式,避免函数调用的消耗。


这样就会有一个问题,一个函数一般都是在好几个文件中被调用,c++采用的编译方式是将。h文件附加到.cpp之前编译的,如果放在.cpp文件中,就会加大
编译器的工作量和编写复杂度,(要把所有.cpp文件扫描一下,找内联函数,提出来,然后在使用的地方做替换)。

如果在.h中定义的话,就可以简单很多
[/Quote]
mark
yshuise 2008-11-14
  • 打赏
  • 举报
回复
内联实际上是对代码的优化。不仅是书上写的那些知识,还是要实践出真知啊。
inline max(){
s::max(); //如果这个s::max只是一个声明,不是内联,也就是在其他的头文件,和他的实现分开了,那么是链接不过的。
}
nickshen_qidian 2008-11-14
  • 打赏
  • 举报
回复
关于定义在哪里,其实都可以。inline 函数对编译器而言必须是可见的以便它能够在调用点内联展开该函数。

另外inline(内联)函数给出了一种解决方案。若一个函数被指定为inline 函数则它将在程
序中每个调用点上被内联地展开。
例如
inline int min( int v1, int v2 )
{
return( v1 < v2 << v1 : v2 );
}
int minVal2 = min( i, j );
在编译时被展开为
int minVal2 = i < j << i : j;

但是,注意inline指示对编译器来说只是一个建议。编译器可以选择忽略该建议,因为
把一个函数声明为inline函数,并不见得真的适合在调用点上展开。例如一个递归函数
并不能在调用点完全展开虽然它的第一个调用可以一个1200 行的函数也不太可能在调
用点展开。
一般地inline 机制用来优化小的,只有几行的,经常被调用的函数。
在抽象数据类的设计中它对支持信息隐藏起着主要作用。
yshuise 2008-11-14
  • 打赏
  • 举报
回复
内联才不仅是减少函数调用开销。
for循环也可以内联。有些500,600百行的也可以内联。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 基于VHDL语言的24进制多功能数字钟 FPGA多功能数字钟设计 安装要求 本项目采用QuartusII9.0版本设计,非9.0版本打开可能会存在兼容性问题。 本项目选用FPGA器件为CycloneIII_EP3C40Q240C8 设计任务 设计一个24进制多功能数字电子钟,要求具备以下功能: (1)时钟显示:能够以十进制在7段数码管上显示“时”、“分”、“秒”、“十分之一秒”。 (2)校表功能:能够对时钟进行校正。 (3)启动/暂停功能:能够控制时钟的启动和暂停。 (4)一键清零功能:能够将时钟清零。 (5)整点报时功能:能够在整点时发出报时信号。 (6)闹钟功能:能够在设置的时间到达时发出闹钟信号。 顶层设计原理图如下: image 设计方案/设计原理及总体框图 设计实现思路: (1)计时功能。 计时功能主要由四个计数器模块共同构成,其中十分之一秒计时器为十进制计数、分,秒计时器为六十进制计数、小时计时器为二十四进制计数。 计时器之间采用进位信号进行串联。 (2)十进制7端数码管显示功能。 显示功能由译码器模块实现。 译码器模块的两个输入端分别为刷新端和数据端。 七个译码器的刷新端连接十分之一秒的周期脉冲信号。 而数据端连接计数器的输出端,用以将4位输出BCD码译码为7端数码管的七位显示信号。 (3)校表功能。 校表功能由二选一模块和校时模式选择器模块构成。 其中二选一模块用于连接下一级计时器模块的进位信号和手动按钮脉冲信号。 当控制信号为“0”时,二选一模块输出计时器模块的进位信号。 而当控制信号为“1”时,二选一模块输出手动按钮信号。 控制信号由校时模式选择器模块输出,校时模式选择器输出端连...

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧