分类: C/C++
2008-05-24 23:45:55
内部和外部
一旦定义后就可被其它调用。 但当一个源程序由多个源文件组成时, 在一个源文件中定义的能否被其它源文件中的调用呢?为此,C语言又把分为两类:
一、内部
如果在一个源文件中定义的只能被本文件中的调用,而不能被同一源程序其它文件中的调用, 这种称为内部函
数。定义内部的一般形式是: static 类型说明符 名(形参表) 例如:
static int f(int a,int b) 内部也称为静态。但此处静态static 的含义已不是指存储方式,而是指对的调用范围只局限于本文件。 因此在不同的源文件中定义同名的静态不会引起混淆。
二、外部
外部在整个源程序中都有效,其定义的一般形式为: extern 类型说明符 名(形参表) 例如:
extern int f(int a,int b)如在定义中没有说明extern或static则隐含为extern。在一个源文件的中调用其它源文件中定义的外部时,应 用extern说明被调为外部。例如:
F1.C (源文件一)
main()
{
extern int f1(int i); /*外部说明,表示f1函
数在其它源文件中*/
……
}
F2.C (源文件二)
extern int f1(int i); /*外部定义*/
{
……
}
本章小结
1. 的分类
(1)库:由C系统提供的;
(2)用户定义:由用户自己定义的;
(3)有返回值的向调用者返回值,应说明类型( 即返回值的类型 );
(4)无返回值的:不返回值,说明为空(void)类型;
(5)有参:主调向被调传送数据;
(6)无参:主调与被调间无数据传送;
(7)内部:只能在本源文件中使用的;
(8)外部:可在整个源程序中使用的。
2. 定义的一般形式
[extern/static] 类型说明符 名([形参表]) 方括号内为可选项。
3. 说明的一般形式 [extern] 类型说明符 名([形参表]);
4. 调用的一般形式 名([实参表])
5. 的参数分为形参和实参两种,形参出现在定义中,实参出现在调用中,发生调用时,把把实参的值传送给形参。
6. 的值是指的返回值,它是在中由return语句返回的。
7. 数组名作为参数时不进行值传送而进行地址传送。形参和实参实际上为同一数组的两个名称。因此形参数组的值发生变化,实参数组的值当然也变化。
8. C语言中,允许的嵌套调用和的递归调用。
9. 可从三个方面对变量分类,即变量的数据类型,变量作用域和变量的存储类型。在第二章中主要介绍变量的数据类型,本章中介绍了变量的作用域和变量的存储类型。
10.变量的作用域是指变量在程序中的有效范围, 分为局部变量和全局变量。
11.变量的存储类型是指变量在内存中的存储方式,分为静态存储和动态存储,表示了变量的生存期。
12.变量分类特性表存储方式存储类型说明符何处定义生存期作用域赋值前的值可赋初值类型动态存储自动变量 auto 寄存器变量 register 或复合语句内被调用时在定义它的或复合语句内不定基本类型int或char外部变量extern之外整个源程序整个源程序静态局部变量static 或复合语句内静态全局变量static 之外整个源程序在定义它的或复合语句内在定义它的源文件内0任何类型