c++ 第六章 程序结构.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 程序结构 6.1外部存储类型 一个程序在很小的规模下,可以用一个源文件来完整表达。本章之前示例的程序都是由单个文件构成的完整程序。一般具有应用价值的程序由多个源文件组成。根据C++程序的定义,其中只有一个源文件具有主函数main(),而其他的文件不能含有main(),否则程序不知道该何处开始执行了。 例如,下面两个文件构成了一个程序,该程序由一个工程文件定义。 //********************* //** ch6_1.prj ** //********************* ch6_1.cpp ch6_1_1.cpp //********************* //** ch6_1.cpp ** //********************* #include iostream.h void fn1(); void fn2(); int n; void main() { n=3; fn1(); //fn1()函数的定义在本文件中 cout n endl; } void fn1() { fn2(); //fn2()函数的定义不在本文件中 } //*********************** //** ch6_1_1.cpp ** //*********************** extern int n; //n由另一个源文件定义 void fn2() //fn2()函数用于另一个源文件 { n=8; //使用n } 运行结果为: 8 文件ch6_1.cpp中含有主函数main(),main()中调用了函数fn1(),函数fn1()调用了函数fn2(),所以在main()函数的前面应有函数fn1()的声明,在函数fn1()的定义之前应有函数fn2()的声明。所有函数声明一般都放在源文件的开始位置。 文件ch6_1_1.cpp中定义了函数fn2()要使用在ch6_1.cpp中定义的全局变量n,为此在文件开头声明了带extern的int n,它表示该变量n不在本文件中分配空间,而在程序的其它文件中 分配空间。 默认的函数声明或定义总是extern的,所以文件ch6_1.cpp中,为了调用fn1()和fn2(),在文件一开始声明的函数原型等价于: extern void fn1(); extern void fn2(); 假如一个程序由十个源文件构造而成,每个源文件都必须访问一个全局变量。在这种情形下,其中的九个文件必须把变量声明为extern,另外一个则不能。虽然在包含main()函数的源文件中分配变量是最合理的,但哪个文件真正分配该变量是无关紧要的。 带extern的变量说明是变量声明,不是变量定义。 如果共同的变量一次都没有定义,或者在各个文件中分别定义,造成定义多次,或者声明的类型不一致,都会造成直接 或间接的错误。例如: //file1.cpp int a = 5; int b = 6; extern int c; //file2.cpp int a; //error:多次定义 extern double b; //error:类型不一致 extern int c; //error:无定义 在上面的代码中,两个源文件都以常规方式定义变量a,没有一个显示声明extern,这时,其行为将依赖于编辑器。VC 会通过编译,但在连接时,给出一个“变量a的定义已经在前面一个文件中定义过”的错误。但BC则将每个文件的变量定义都看作是全局静态变量。所以,程序将会运行,但两个文件中的 变量a是互不相干的。 两个文件中b的类型不一样,这时,VC将在连接时报告一个“未定的外部名”错误,而BC却不能发现该错误而使程序错误地运行下去。 两个源文件又都声明变量c为extern,这时,编译也不会发生问题,但在连接时却会找不到该变量,产生一个连接错误,因为没有一个文件为该变量分配空间。 6.2 静态存储类型 1.静态全局变量 在全局变量前加一个static,使该变量只在这个源文件中可用,称之为全局静态变量。全局静态变量就是静态全局变量。

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档