-
8.10
内部函数与外部函数
函数本质上是全局的,
但可以限定函
数能否被别的文件所引用。
当一个源程序由多个源
文件组成时,
C语言根据函数能否被其它源文件中的函数调用,
将函数分为内
部函数和外部
函数。
8.10.1
内部函数
如果在一个源文件中定义的
函数,
只能被本文件中的函数调用,
而不能被同一程序其它
p>
文件中的函数调用,这种函数称为内部函数。
定义一个内部函数,只需在函数类型前再加一个
“static”
< br>关键字即可,如下所示:
static
函数类型
函数名
(
函数参数表
< br>)
{…
…}
关键字
“static”
,译成中文就是
“
静
态的
”
,所以内部函数又称静态函数。但此处
< br>“static”
的含义不是指存储方式,而是指对函数的作用域仅局限于本文件
。
使用内部函数的好处是:
不同的人
编写不同的函数时,
不用担心自己定义的函数,
是否
会与其它文件中的函数同名,因为同名也没有关系。
8.10.2
外部函数
外部函数的定义:在定义函
数时,如果没有加关键字
“static”
,或冠以关键字
p>
“extern”
,表示
此函数是外部函数
:
[extern]
函数类型
函数名
(
函数参数表
)
{……}
调用外部函数时,需要对其进行说明:
[extern]
函数类型
函数名
(
参数类型表
)[
,函数名
2(
参数类型表
2
)……]
;
例
8.22
外部函数应用。
(
< br>1
)文件
mainf.c
main()
{
extern void
input(…),process(…),output(…);
input(…);
process(…);
output(…);
}
(
2
p>
)文件
subf1.c
extern
void input(……)
/*
定义外部函数
*/
{……}
(
3
)文件
s
ubf2.c
extern void
process(……)
/*
定义外部函数
*/
{……}
(
4
)文件
subf3.c……
extern void output(……)
/*
定义外部函数
*/
{……}
例
8.23
数组排序
----
简单选择排序
file1.c
main()
{
extern void sort(int
array[ ],int
n);
int a[10],i;
for(i=0;i<10;i++)
scanf(
sort(a,10);
for(i=0;i<10;i++)
printf(
printf(
}
file2.c
void sort(int
array[],int
n)
{
int i,j,k,t;
<
br>3 中清除(清除后为空)
for(i=0;i
{
k=i;
for(j=i+1;j
if(array[j]
k=j;
if(k!=i)
{
t=array[i];
array[i]=array[k];
array[k]=t;
}
}
}
8.11
多个源程序文件的编译和连接
p>
(
1
)一般过程
编辑各源文件
→
创建
Pr
oject
(项目)文件
→
设置项目名称
→
编译、连接,运行,
查看结果。
p>
(
2
)创建
Pro
ject
(项目)文件
用编辑源文件
相同的方法,创建一个扩展名为
.PRJ
的项目文件:该文件中
仅包括将被
编译、连接的各源文件名,一行一个,其扩展名
.C
可以缺省;文件名的顺序,仅影响编译
的顺序,与运行无关。<
/p>
注意:如果有某个(些)源文件不在当前目录下,则应在文件名
前冠以路径。
(
)设置项目名称
打开菜单,
选取
Project
/
Project
name
,输入项目文件名即可。
(
4
)编译、连接,运行,查看结果
<
/p>
与单个源文件相同。
编译产生的目标文件,
以及连接产生的可执行文件,
它们的主文件
名,均与项目文件
的主文件名相同。
注意:
当前项目文
件调试完毕后,
应选取
Project
/
Clear project
,
将其
项目名称从
“Project
name”
。否则,编译、连接和运行的,始终是该项目文件!
(
5
)关于错误跟踪
缺省时,
仅跟踪当前一个源程序文件
。
如果希望自动跟踪项目中的所有源文件,
则应将