- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计15--用函数实现模块化程序设计3解析
C 程序设计 授课教师 孙向群 fd_jsj@163.com #include stdio.h int main() { int max( ); extern int A,B,C; scanf(“%d %d %d”,A,B,C); printf(max is %d\n,max()); return 0; }? int A ,B ,C;? int max( ) { int m; m=AB?A:B; if (Cm) m=C; return(m); } 7.9.3 全局变量的存储类别 2. 将外部变量的作用域扩展到其他文件 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num,不能分别在两个文件中各自定义一个外部变量Num 应在任一个文件中定义外部变量Num,而在另一文件中用extern对Num作“外部变量声明” 在编译和连接时,系统会由此知道Num有“外部链接”,可以从别处找到已定义的外部变量Num,并将在另一文件中定义的外部变量num的作用域扩展到本文件 7.9.3 全局变量的存储类别 例7.19 给定b的值,输入a和m,求a*b和am的值。 解题思路: 分别编写两个文件模块,其中文件file1包含主函数,另一个文件file2包含求am的函数。 在file1文件中定义外部变量A,在file2中用extern声明外部变量A,把A的作用域扩展到file2文件。 7.9.3 全局变量的存储类别 文件file1.c: #include stdio.h int A; int main() { int power(int); int b=3,c,d,m; scanf(%d,%d,A,m); c=A*b; printf(%d*%d=%d\n,A,b,c); d=power(m); printf(%d**%d=%d\n,A,m,d); return 0; } 7.9.3 全局变量的存储类别 文件file2.c: extern A; int power(int n) { int i,y=1; for(i=1;i=n;i++) y*=A; return(y); } 编译和运行包括多个文件的程序,可参考《C程序设计学习辅导》一书的“C语言上机指南”部分 7.9.3 全局变量的存储类别 3.将外部变量的作用域限制在本文件中 有时在程序设计中希望某些外部变量只限于被本文件引用。这时可以在定义外部变量时加一个static声明。 file1.c static int A; int main ( ) { …… } file2.c extern A; void fun (int n) { …… A=A*n; …… } 只能用于本文件 本文件仍然不能用 7.9.3 全局变量的存储类别 说明: 不要误认为对外部变量加static声明后才采取静态存储方式,而不加static的是采取动态存储 声明局部变量的存储类型和声明全局变量的存储类型的含义是不同的 对于局部变量来说,声明存储类型的作用是指定变量存储的区域以及由此产生的生存期的问题,而对于全局变量来说,声明存储类型的作用是变量作用域的扩展问题 7.9.3 全局变量的存储类别 用static 声明一个变量的作用是: (1) 对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。 (2) 对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。 7.9.3 全局变量的存储类别 注意:用auto、register、static声明变量时,是在定义变量的基础上加上这些关键字,而不能单独使用。 下面用法不对: int a; static a; 编译时会被认为“重新定义”。 7.9.3 全局变量的存储类别 7.9.4 存储类别小结 对一个数据的定义,需要指定两种属性: 数据类型和存储类别,分别使用两个关键字 例如: static int a; auto char c; register int d; 可以用extern声明已定义的外部变量 例如: extern b; 静态局部整型变量或静态外部整型变量 自动变量,在函数内定义 寄存器变量,在函数内定义 将已定义的外部变量b的作用域扩展至此 (1)从作用域角度分,有局部变量和全局变量。它们采用的存储类别如下: 按作用域角度分 局部变量 全局变量 自动变量 静态局部变量 寄存器变量
文档评论(0)