第7章程序文件和预处理指令.pptx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章程序文件和预处理指令

第7章 程序文件和预处理指令 C++程序是从main函数开始运行,其间可能调用若干函数,这些函数又调用了另外的函数。函数的层层调用构成了C++程序的结构。然而,当多个人合作开发时,就会涉及到程序文件的组合。在Visual C++ 2008中,一个解决方案可以容纳多个程序文件,这些程序文件共同构成了一个完整的程序。本章将介绍多个程序文件之间如何交互,以及如何管理和控制程序文件的内容。 头文件的使用 外部名称 命名空间 预处理指令7.1 使用头文件 C++程序一般由多个文件组成。C++程序包含两大类文件: 头文件 这种文件一般用文件扩展名.h来标识。这些文件包含类型定义和其他用于程序中一个或多个源文件的代码。 源文件 其扩展名为.cpp,也可以是.c。这种文件包含要编译成机器指令的代码,如函数的字义。需要的头文件通过预编译指令#include添加到源文件中。 头文件和源文件之间的主要区别是它们的使用方式不同。根据约定,在头文件可以包含下面的内容: 类型声明 函数声明 常量定义 数据声明 预处理指令 注释 但头文件不宜包含: 函数定义 数据定义 每个源文件必须包含它需要的头文件。在编译程序时,只编译源文件,根据#include指令将添加程序需要的头文件内容。编译的每个源文件都会生成一个对象文件,它是一个扩展名为.obj的二进制输出文件。obj文件由链接程序组合成一个可执行的程序。7.2 外部名称 关键字extern可以置于变量或者函数前,以标识变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他文件中寻找其定义。 如果声明的外部变量一次也没定义,或者外部变量多次定义,或者类型不同,都会造成直接或间接的错误。这一点需要读者注意。7.3 命名空间 在ANSI C++标准库中使用的所有名称都是在std命名空间中定义的。这意味着,在这个标准库中使用的所有名称都有一个附加的限定名std,例如,cout其实是std::cout。 对于一个大型的程序,除了用函数去堆积程序外,还需要程序员之间互相协调。对于不在同一台计算机上的多个程序员,在开发过程中名称的冲突,共享名称的使用都是需要解决的问题,这样我们就需要定义自己的命名空间。7.3.1 声明命名空间 在没有定义命名空间时,就默认使用全局命名空间。全局命名空间中的所有名称就声明时的名称,没有附加命名空间名称。对于小型的程序,可以在全局命名空间中定义名称,这不会遇到任何问题。对于较大的应用程序,出现命名冲突的机会大大增加,此时就应该使用命名空间。 使用关键字namespace可以声明一个命名空间。 7.3.2 未指定名称的命名空间 在声明命名空间时,如果未指定名称,但这并味着命名空间就没有名称。下面的代码声明一个未指定名称的命名空间: namespace { //名称声明 } 这个语句创建一个命名空间,它有一个由编译器生成的内部名称。在一个文件中只能有一个未指定名称的命令空间,如果声明其他未指定名称的命名空间时,则会认它们位于同一个命名空间中。 7.4 预处理指令 预处理指令本身不是C++语言的组成部分,不能直接对它们进行编译,它们是在C++程序代码被编译为机器指令之前执行。预处理指令的作用是根据包含的源文件中的指令,使源代码正确进行编译阶段。所有的预处理指令都是以符号“#”开头,以便与C++语句区分开。最常见的预处理指令包括:文件包含,条件编译、宏定义、#error和#pragma指令。7.4.1 文件包含 #include指令提示预编译将包含的头文件内容附加到源文件中,以参加编译。例如: #include iostream 这个语句将iostream的内容提取到程序中。如果头文件是C++系统提供的,则用尖括号把文件括起来。如果是自定义的头文件,则文件名要放在双引号中,例如: #include myHead.h“ 两者之间的差别主要是在编译器的路径搜索顺序上。在安装C++编译器时,已经将C++系统资源的默认路径设置好了。对于用了尖括号的头文件,编译器直接就到这个默认的路径上搜索其头文件。 7.4.2 宏定义 在C语言中,宏定义#define常用于定义符号常量、函数功能、重新命名、字符串的拼接等,但在C++中宏定义#define主要用于条件编译指令中,因此我们还需要对宏定义#define有所了解。 最简单的宏定义是指定一系列字符,以代替程序文件中的特定符号。 7.4.3 条件编译 在程序中我们可以通过条件判断语句决定执行某部分代码,或者根据条件执行不同的代码,在预处理器中提也提供了类似的功能——条件编译。通过条件编译可注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。 条件编译指令#if的使用方式有两种。第一种是测试某个标识符以前是否使用#define

您可能关注的文档

文档评论(0)

liudao + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档