和变量一样,函数也有链接性,虽然可选择的范围比变量小。C++不予许在一个函数中定义另一个函数,因此所有函数的持续性都是静态的,即在整个程序执行期间都一直存在。
(1)外部链接性
在默认情况下,函数的链接性为外部的,即可以在文件之间共享。
(2)内部链接性
还可以使用关键字static将函数的链接性设置为内部的,使之只能在一个文件中使用。必须同时在原型和函数定义中都使用static关键字:
static int private(double x);
...
static int private(double x)
{
...
}
这意味着该函数只在该文件中可见,还意味着可以在其他文件中定义同名的函数。
在定义静态函数的文件中,静态函数将覆盖外部定义,因此即使在外部定义了同名函数,该文件仍将使用静态函数。
单定义规则也适用于非内联函数,因此对于每个非内联函数,程序只能包含一个定义。对于链接性为外部的函数来说,这意味着在多文件程序中,只能有一个文件包含该函数定义,但使用该函数的每个文件都应该包含其函数原型。
内联函数不受单定义规则的约束,这允许程序员能够将内联函数的定义放在头文件中。这样,包含了头文件的每个文件都有内联函数的定义。然而,C++要求同一个函数的所有内联定义都必须相同。