首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联函数

内联函数
EN

Stack Overflow用户
提问于 2012-03-30 23:54:21
回答 3查看 167关注 0票数 2

我是用Linux下的gcc用C语言开发的。

我用以下方式在.H和.C文件中组织我的小函数

代码语言:javascript
复制
      // .H file
      extern int my_function( int val );

      // .C file
      inline int my_function( int val ){
          // my job..very short!
      }

这些函数很小,所以它们是非常好的内联候选函数,但我不知道它们是否会确定。

我对我组织文件的方式有疑问,我在想,我所有的函数都直接内联到.h文件中而不是.C文件中可能会更好。你能帮我澄清一下我的疑问吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-31 00:33:38

首先,请注意,您可以通过添加-finline-functions选项告诉gcc尝试将小函数内联到它们的调用者中。

如果你对你的函数实际上是内联的有任何怀疑,你可以通过使用-Winline让gcc警告你不可内联的函数

在这里,由于您的函数同时被声明为externinline,它们的将被内联,因为inline定义将仅用于内联。在这种特殊情况下,函数根本不会自行编译。

有关更多详细信息,请阅读http://gcc.gnu.org/onlinedocs/gcc/Inline.html

票数 3
EN

Stack Overflow用户

发布于 2012-03-30 23:58:59

无论你的函数有多小,都取决于编译器是否内联它。

因此,即使你只有很少的函数,并且你在你的代码中内联了它们,仍然不能保证所有的函数都会被编译器内联。

你可以在内联here上找到一些有用的技巧。

票数 2
EN

Stack Overflow用户

发布于 2012-03-31 17:23:30

首先,编译器必须能够看到函数的定义,以便对其进行内联。因此,必须将定义放在头文件中。(在这里,我假设您的应用程序由多个源文件组成)。注意:部分开发环境支持多文件编译,不支持多文件编译。

其次,如果你已经习惯了C++,那么内联C99的语义就有点混乱了(在这里,一切都是“正常工作”的)。在C99中,您必须挑选拥有该函数的单个源文件(而不是头文件) --如果该函数没有内联到某个源文件中,则该函数必须恰好存在一个显式定义。这是通过使用extern关键字指定函数来完成的。(这与extern的传统解释有所不同,因为它只用于声明)。

例如:

代码语言:javascript
复制
  // .h file
  inline int my_function( int val )
  {
      // my job..very short!
  }

  // In ONE .c file
  extern int my_function( int val );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9946418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档