创建内联函数的方法是在函数声明中使用函数说明符inline。通常,首次使用内联函数前在文件中对 该函数进行定义。因此,该定义也作为函数原型。也就是说,代码应像下面这样:
#include <stdio.h>
inJine void eatiine () //内联函数的定义/原型 {
while (getchar () != '\n.) continue:
}
int main ()
{
eatline (); //函数调用
编译器看到内联声明后会用eatline ()函数体代替函数调用,其效果如同您在此处键入了函数体的代码:
#inciude <stdio.h>
inline void eatline ( ) //内联函数的声明/原型
{
while (getchar ( ) ! = ' \n') continue:
}
i nt. main ()
{
while (gctchar () != .\n.) // 替换 / 函数调用 continue;
因为内联函数没有预留给它的单独代码块,所以无法获得内联函数的地址(实际上,可以获得地址, 似这样会使编译器产生非内联函数)。另外,内联函数不会在调试器中显示。
内联函数应该比较短小。对于很长的函数,调用函数的时间少于执行函数主体的时间;此时,使用内 联函数不会节省多少时间。
编译器在优化内联函数时,必须知道函数定义的内容。这意味着内联函数的定义和对该函数的调用必 须在同一文件中。正因为这样,内联函数通常具有内部链接。因此,在多文件程序中,每个调用内联函数 的文件都要对该函数进行定义。达到这个目标的最简单方法为:在头文件中定义内联函数,并在使用该函 数的文件中包含该头文件。一般不在头文件中放置可执行代码,但内联函数是个例外。因为内联函数具W 内部链接,所以在多个文件中定义同一内联函数不会产生什么问题。
C提供了几种方法用于在多文件程序中使用内联函数。通常,C只允许对函数进行惟一的一次定义, 但是对内联函数却放松了这个限制。因此,最简单的方法是在使用内联函数的文件中都定义该函数。要达 到这个目标的简易方式为:在头文件中定义内联函数,并在使用该函数的源代码文件中包含该头文件。