1》如果一个函数只能被本文件中其他函数所调用 ,它称为内部函数,又称为静态(static)函数。
内部函数首部的一般形式为:
static 类型标识符 函数史(形参表)
static int func (int a, int b)
可以使内部函数只局限于所在的文件内。
如果在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不用担心所用的函数是否会与其他文件中的函数重名。
2》如果在函数首部的最左端以关键字 extern(可以省略) ,则表示此函数是外部函数,可供其他文件调用 。
外部函数首部的一般形式为:
extern 类型标识符 函数史(形参表)
extern int func (int a ,int b )
注意:如果在定义函数时省略extern,则默认为外部函数。
3-1》file1.cpp
#include<iostream>
using namespace std;
int main ()
{
extern int max(int a,int b);//声明在本函数将要调用在其他文件中定义的max函数
int a,b;
a=10;
b=20;
cout<<max(a,b)<<endl;
return 0;
}
3-2》file2.cpp
extern int max(int a,int b)
{
return a>b?a:b;
}
使用此例可知:使用extern 声明就可以在一个文件中调用其他文件中的定义的外部函数了。
利用函数原型扩展函数作用域最常见的例子是#include指令。
例如,在程序中需要调用sin函数,但是三角函数并不是由用户在本文件中定义的,而是存放在数学函数库中的。按以上的介绍,必须在本文件中写出sin函数的原型,否则无法调用sin函数。
sin函数的原型是:
double sin(double x);
本来应该由程序设计者在调用库函数时先从手册中查出所用的库函数的原型,并在程序中一一写出来,但是这样显然是麻烦而困难的。为了减少程序设计都的困难,在头文件cmath中包括了所有的数学函数的原型和其他有关信息,用户只须用以下#include指令:
#include<cmath>
即可。这时,在该文件中就能合法地调用 各数学库函数了。
详见:C++程序设计(第二版) P123-P125