该函数是否在头文件中定义?因此,实际代码直接在函数中给出,如下所示:
static int addTwo(int x)
{
return x + 2;
}
这只是为许多不同的C文件提供有用功能的一种方式.每个包含头文件的C文件都有自己的定义,可以调用.这当然会浪费内存,而且(在我看来)这是一件非常丑陋的事情,因为在头文件中包含可执行代码通常不是一个好主意.
记住,#include
:ing一个头基本上只是将头的内容(以及它包含的任何其他头)粘贴到C文件中,就像编译器看到的那样.编译器永远不知道一个特定的函数定义来自头文件.
UPDATE:在很多情况下,像上面这样做其实是个好主意,我意识到我的答案听起来非常黑白,这有点过于简单化了.例如,建模(或仅使用)intrinsic functions的代码可以像上面那样表示,并带有一个明确的inline
关键字:
static inline int addTwo(int *x)
{
__add_two_superquickly(x);
}
这里,__add_two_superquickly()
函数是一个虚构的内部函数,因为我们希望整个函数基本上编译成一条指令,所以我们真的希望它是内联的.尽管如此,上面的操作比使用宏要干净.
当然,直接使用内在函数的优势在于,通过提供替代实现并根据使用的编译器 Select 正确的实现,将其封装在另一个抽象层中,可以在缺少特定内在函数的编译器上构建代码.