我是用Linux下的gcc用C语言开发的。
我用以下方式在.H和.C文件中组织我的小函数
// .H file
extern int my_function( int val );
// .C file
inline int my_function( int val ){
// my job..very short!
}这些函数很小,所以它们是非常好的内联候选函数,但我不知道它们是否会确定。
我对我组织文件的方式有疑问,我在想,我所有的函数都直接内联到.h文件中而不是.C文件中可能会更好。你能帮我澄清一下我的疑问吗?
发布于 2012-03-31 00:33:38
首先,请注意,您可以通过添加-finline-functions选项告诉gcc尝试将小函数内联到它们的调用者中。
如果你对你的函数实际上是内联的有任何怀疑,你可以通过使用-Winline让gcc警告你不可内联的函数
在这里,由于您的函数同时被声明为extern和inline,它们的将被内联,因为inline定义将仅用于内联。在这种特殊情况下,函数根本不会自行编译。
有关更多详细信息,请阅读http://gcc.gnu.org/onlinedocs/gcc/Inline.html。
发布于 2012-03-30 23:58:59
无论你的函数有多小,都取决于编译器是否内联它。
因此,即使你只有很少的函数,并且你在你的代码中内联了它们,仍然不能保证所有的函数都会被编译器内联。
你可以在内联here上找到一些有用的技巧。
发布于 2012-03-31 17:23:30
首先,编译器必须能够看到函数的定义,以便对其进行内联。因此,必须将定义放在头文件中。(在这里,我假设您的应用程序由多个源文件组成)。注意:部分开发环境支持多文件编译,不支持多文件编译。
其次,如果你已经习惯了C++,那么内联C99的语义就有点混乱了(在这里,一切都是“正常工作”的)。在C99中,您必须挑选拥有该函数的单个源文件(而不是头文件) --如果该函数没有内联到某个源文件中,则该函数必须恰好存在一个显式定义。这是通过使用extern关键字指定函数来完成的。(这与extern的传统解释有所不同,因为它只用于声明)。
例如:
// .h file
inline int my_function( int val )
{
// my job..very short!
}
// In ONE .c file
extern int my_function( int val );https://stackoverflow.com/questions/9946418
复制相似问题