k A的外的出》净的出《的要的《图的《的气
本章要点: 区掌握外部存储类型和静态存储类型在多文件中作用 区理解作用域、可见性、生命期、多文件结构及编译 预处理的概念 区学会使用头文件 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 2 掌握外部存储类型和静态存储类型在多文件中作用 理解作用域、可见性、生命期、多文件结构及编译 预处理的概念 学会使用头文件 本章要点:
§C++程序结构 一个较小规模的程序,常用一个源文件(cpp和h)来实现。但大程序 多将其分解为多个源文件。其好处是: ①便于功能的划分,便于程序的调试 ②可以避免重复编译。(因为编译是以文件为单位的,若程序 只有一个源文件,若改动了其某个函数,则整个源文件都得 重新编译。) ③可以把相关的函数放到一个源文件中 不管大程序分解为多少个源文件,其中有且仅有一个文件中包含一个函 数man()。每个源文件分别编译,再通过连接程序把它们及程序中用到的库 函数连接成一个可执行的程序。 C++程序设计课件设计制作:徐龙琴 3
C++程序设计课件 设计制作:徐龙琴 3 § C++程序结构 一个较小规模的程序,常用一个源文件(.cpp和.h)来实现。但大程序 多将其分解为多个源文件。其好处是: ①便于功能的划分,便于程序的调试。 ②可以避免重复编译。(因为编译是以文件为单位的,若程序 只有一个源文件,若改动了其某个函数,则整个源文件都得 重新编译。) ③可以把相关的函数放到一个源文件中 不管大程序分解为多少个源文件,其中有且仅有一个文件中包含一个函 数main( ) 。每个源文件分别编译,再通过连接程序把它们及程序中用到的库 函数连接成一个可执行的程序
例:编写求两个自然数m和n的最大公约数和最小公倍数。(用 函数调用来实现。) ∥主函数cpp ∥最大公约数cpp #include unsigned int yue(unsigned int x, unsigned int yue(unsigned int x, unsigned int y) nt t: unsigned int y) if(x<y) void main( {t=x; unsigned int m, n, b,y; scanf (ou%u", &m, &n); b=m*n: while(yl=0) y=yue(n, m) it=x%y printf(%u, %uIn",y,b/y) return x C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 4 例 :编写求两个自然数m和n的最大公约数和最小公倍数。(用 函数调用来实现。) //主函数.cpp #include unsigned int yue(unsigned int x, unsigned int y); void main ( ) {unsigned int m,n,b,y; scanf ("%u%u",&m,&n); b=m*n; y=yue(n,m); printf ("%u,%u\n",y,b/y); } //最大公约数.cpp unsigned int yue(unsigned int x, unsigned int y) {int t; if (x<y) { t=x; x=y; y=t;} while (y!=0) {t=x%y; x=y; y=t;} return x;}
总结C++程序结构: ①逻辑上,一个C++程序由一些函数和一些全局(外部)变 量或对象构成,其中必须有且仅有一个名字为man的函 数,整个程序从函数main开始执行直到其结束 ②物理上,一个C++程序可以放在一个或多个源文件(模块) 中,源文件的文件名以cpp和h作为扩展名,每个文件包 含一些函数和全局变量或对象的定义,其中有且仅有一个 文件中包含一个函数main C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 5 总结C++程序结构 : ① 逻辑上,一个C++程序由一些函数和一些全局(外部)变 量 或对象构成,其中必须有且仅有一个名字为main的函 数,整个程序从函数main开始执行直到其结束。 ② 物理上,一个C++程序可以放在一个或多个源文件(模块) 中,源文件的文件名以.cpp和.h作为扩展名,每个文件包 含一些函数和全局变量或对象的定义,其中有且仅有一个 文件中包含一个函数main
§6.1外部存储类型 若想在程序某个源文件中用该程序其它源文件定义的全局 变量或函数,要用 extern对其声明。 例: //filel. cpp //file2. cpp int V=0 int x1 static char=A extern int y; void maino {…y…∥Ok {….x…/Ok c∴//Ok /Error, x未声明 y…/Ok z…,/Eror,z未声明 Z ● ∥/Eror,z未声明 e…/Eror,c不可使用 double z=2; {…2Z…,/Ok C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 6 § 6.1外部存储类型 若想在程序某个源文件中用该程序其它源文件定义的全局 变量或函数,要用exterm对其声明。 //file2.cpp int y=0; static char c='A'; f( ) { ...y ... //Ok ...c ... //Ok ...x ... /Error, x未声明 ...z ... /Error, z未声明 } double z=2; g( ) { ...z ... //Ok} 例: //file1.cpp int x=1; extern int y; void main() { ...x ... //Ok ...y ... //Ok ...z ... //Error, z未声明 ...c ... //Error, c不可使用 }
extern的用法: ①本文件中,在定义前要使用全局变量,可用 extern对变量作引用说明 例: extern int n;/对全局变量n作引用性说明 void tI(int a, int b) {…使用全局变量n intn;/对全局变量n作定义 ②在同一项目(程序)的其它源程序文件中定义的全局变量,通过 extern说 明后,可在该文件中使用 C++程序设计课件设计制作:徐龙琴 7
C++程序设计课件 设计制作:徐龙琴 7 ① 本文件中,在定义前要使用全局变量,可用extern对变量作引用说明。 例: extern int n; //对全局变量n作引用性说明 void t1(int a, int b) { …使用全局变量 n … } …… int n; //对全局变量n作定义 ② 在同一项目(程序)的其它源程序文件中定义的全局变量, 通过 extern 说 明后,可在该文件中使用. extern的用法:
§62静态存储类型 变量的静态存储类型有:全局变量和静态变量,它门都存 方在内存的全局数据区。都在定义时开辟存储空间,程序结東 时释放存储空间;生命周期均为程序运行期间。其值都具有继 承性且其默认的初值为0 函数按其存储类型也可以分为两类:内部函数和外部函数 内部函数:是只能在定义它的文件中被调用的函数,而 在同一程序的其他文件中不可调用。内部函 数定义时,在函数类型前加 static,所以也 称为静态函数。 C++程序设计课件设计制作:徐龙琴 8
C++程序设计课件 设计制作:徐龙琴 8 § 6.2 静态存储类型 变量的静态存储类型有:全局变量和静态变量,它门都存 方在内存的全局数据区。都在定义时开辟存储空间,程序结束 时释放存储空间;生命周期均为程序运行期间。其值都具有继 承性且其默认的初值为0。 函数按其存储类型也可以分为两类:内部函数和外部函数 1.内部函数: 是只能在定义它的文件中被调用的函数,而 在同一程序的其他文件中不可调用。内部函 数定义时,在函数类型前加static,所以也 称为静态函数
(1)静态函数格式如下: static函数类型函数名(参数列表) 函数体} 例:静态函数的例子 ∥)件 filel. cpp中 内部函数的 只限于 #include ,所以在 static void fun (; void main() ,它们互不干扰。 {fun();} static void fun() i cout<< this in filel <<endl; j C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 9 ⑴ 静态函数格式如下: static 函数类型 函数名(参数列表) { 函数体 } 内部函数的作用域只限于定 义它的文件,所以在同一个程序 的不同文件中可以有相同命名的 函数,它们互不干扰。 例: 静态函数的例子。 //文件file1.cpp中 #include static void fun( ); void main( ) { fun( ); } static void fun( ) { cout<<"this in file1 "<<endl; }
2外部函数:是可以在整个程序各个文件中被调用的函数 外部函数定义时,在函数类型前加 extern,格 式如下: extern() } 如果定义时没有声明函数的存储类型,系统默认为 extern型。 C++程序设计课件设计制作:徐龙琴 10
C++程序设计课件 设计制作:徐龙琴 10 ⒉外部函数:是可以在整个程序各个文件中被调用的函数。 外部函数定义时,在函数类型前加extern,格 式如下: 如果定义时没有声明函数的存储类型,系统默认为extern 型。 extern () { }