内部函数和外部函数

来源:互联网 发布:skypixel软件 编辑:程序博客网 时间:2024/05/20 18:18

     函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数不能被其他文件调用根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。

(1)内部函数

    如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static。即static 类型标识符函数名(形参表)如:

static int func(int a,int b);
    内部函数又称静态函数。使用内部函数,可以使函数只局限于所在文件,如果在不同的文件中有同名的内部函数,互不干扰。这样不同的人可以分别编写不同的函数,而不必担心所用函数是否会与其他文件中函数同名,通常把只能由同一文件使用的函数和外部变量放在一个文件中,在它们前面都static使之局部化,其他文件不能引用。

实例:

file1.cpp:

static int function01(int a) //static.内部函数,不能被其他文件所引用{return a+1;}

file2.cpp

#include <iostream>using namespace std;extern int function01(int a);int main(){int a=9;cout<<function01(a)<<endl;  //not oksystem("pause");return 0;}

编译执行不正确,原因在与file1.cpp中的function01函数是static的,也就是内部函数,不能被所在文件之外的方法调用。



(2)外部函数

    在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。如函数首部可以写为:

extern int function01(int a);

    这样,函数fun就可以为其他文件调用。C语言规定,如果在定义函数时省略extern,则隐含为外部函数。在需要调用此函数的文件中,用extern声明所用的函数是外部函数。

实例:

add.cpp:

//int add(int a,int b)  省略extern效果一样extern int add(int a,int b){return a+b;}


sub.cpp:

//int sub(int a,int b)   省略extern效果一样extern int sub(int a,int b) {return a-b;}

mul.cpp:

//int mul(int a,int b)  省略extern效果一样extern int mul(int a,int b){return a*b;}

divint.cpp:

#include <cassert>//int div(int a,int b)     省略extern效果一样extern int divint(int a,int b){assert(b!=0);return a/b;}

main.cpp:
#include <iostream>using namespace std;extern int add(int a,int b);extern int sub(int a,int b);extern int mul(int a,int b);extern int divint(int a,int b);int main(){int a,b;cin>>a>>b;cout<<add(a,b)<<endl<<sub(a,b)<<endl<<mul(a,b)<<endl<<divint(a,b)<<endl;system("pause");return 0;}



执行正确。

0 0