
上QQ阅读APP看书,第一时间看更新
7.6.4 函数的跨文件调用
根据在某个源程序文件中定义的函数能否被其他源程序文件所调用,将函数分为内部函数和外部函数。
1.内部函数
只能被本文件中其他函数调用。定义内部函数时,在最前面加static关键字即可,形式如下:

内部函数又称为静态函数,使用内部函数,可以使函数只局限于其定义所在的源程序文件中,所以不同源程序文件中的同名函数彼此不受干扰,试想,如果分工不同的两个人编写两个不同的.cpp源程序文件,如果他们所写的函数同名,则在编译链接时会报错,如果用了static修饰这些函数,那么即使所起的函数名相同,也互相不受影响(因为这些函数被限制在当前定义所在的源文件中)。
2.
外部函数
定义一个函数时,如果在其前面不使用static关键字修饰,它就是外部函数。形式如下:

在需要调用此函数的其他源程序文件中,只需要增加该函数的函数声明即可。
看看如下范例,例如在MyProject2.cpp中定义了一个外部函数:

现在希望在MyProject.cpp的main函数中调用该函数,那么首先要在MyProject.cpp的开头部分书写该函数的声明:

而后,就可以在MyProject.cpp源程序文件的main函数中直接调用g_otherfunc函数。代码如下:

开发技巧:可以将这些外部函数的声明(不限于外部函数声明,其实可以针对所有函数的声明)语句统一放到一个.h头文件中,任何源程序代码文件(.cpp文件)只要在开头#include这个.h头文件,则在这些源程序代码文件中,就可以任意调用其他源程序代码中所定义的外部函数。