我在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!
}
这些功能很小,所以它们非常适合内联,但我不知道它们是否可以肯定。
我对我组织文件的方式存有疑问,我认为将所有函数直接内联到没有.C文件的.h文件中可能会更好。 你能帮我澄清一下我的疑问吗?
答案 0 :(得分:3)
首先,请注意,您可以通过添加-finline-functions
选项告诉 gcc 尝试将小功能内联到其呼叫者中。
如果您对您的功能实际内联有任何疑问,可以通过-Winline
此处,由于您的函数同时声明为extern
和inline
,因此将内联,因为inline
定义仅用于内联。在这种特殊情况下,函数根本不会自行编译。
答案 1 :(得分:2)
答案 2 :(得分:0)
首先,编译器必须能够看到函数的定义才能内联它。因此,您必须将定义放在头文件中。 (这里,我假设您的应用程序包含多个源文件)。注意:某些开发环境支持多文件编译,在这种情况下,此注释不适用。
其次,如果你习惯了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 );