内部静态函数和外部函数函数本质上是全局的因为定义一个函数的目的就是要被另外的函数调用。如果不加声明的话一个文件中的函数既可以被本文件中其他函数调用也可以被其他文件中的函数调用。但是也可以指定某些函数不能被其他文件调用。根据函数能否被其他源文件调用将函数区分为内部函数和外部函数。内部静态函数如果一个函数只能被本文件中其他函数所调用它称为内部函数。在定义内部函数时在函数名和函数类型的前面加static,即static 类型名 函数名(形参表);例如static int fun(int a,int b),fun是一个内部函数只能在本文件中使用,不能被其他文件调用。内部函数又称静态函数因为它是用static声明的。使用内部函数可以使函数的作用域只局限于所在当前文件中使用。这样在不同的其他文件中即使有同名的内部函数也互不干扰不必担心所用内部函数是否会与其他文件模块中的函数同名。通常把只能在本文件中使用的函数和外部变量放在文件的开头前面都冠以static使之局部化变成内部静态函数和外部静态全局变量其他文件不能引用。这就提高了程序的可靠性。file.cstatic int a;static int b;static int fun(int a,int b);外部函数如果在定义函数时在函数首部的最左端加关键字extern(可省略),则此函数是外部函数可供其他文件调用。在当前本文件中,定义函数时可省略extern,则默认为外部函数。extern int fun(int a, int b)在需要调用此函数的其他文件中需要对此函数作声明(不要忘记即使在本文件中调用一个函数也要用函数原型进行声明)。在对此函数作声明时要加关键字extern,表示该函数“是在其他文件中定义的外部函数”。filel.c(文件1)#include stdio.h int main() { //以下3行声明了在本函数中调用的已在其他文件中定义的3个函数 extern void enter_string(char str[]); //对其他文件的函数的声明 extern void delete_string(char str[],char ch); //对其他文件的函数的声明 extern void print_string(char str[]); //对其他文件的函数的声明 //定义局部变量 c str char c,str[80]; enter_string(str);//调用其他文件中定义的enter_string函数并传入参数str delete_string(str,c);//调用其他文件中定义的delete_string函数并传入参数str c print_string(str);//调用其他文件中定义的print_string函数并传入参数str return 0; }file2.e(文件2)void enter_string(char str[80]) //定义外部函数enter_string { gets(str); }file3.e(文件3)void delete_string(char str[],char ch) //定义外部函数delete_string { }file4.c(文件4)void print_string(char str[]) //定义外部函数print_string { printf(”%s\n”,str); }第三方库里的外部函数的引用在当前文件中,我要使用第三方库里的某一个外部函数的引用, 不需要 额外写extern 某一个函数 这么费劲。 只需要 引入#include 头文件即可 因为头文件里包含了 该外部函数的原形函数的引用。例如: 使用第三方库里sin函数 只需要在当前文件里 #includde math.h 即可。