- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 第73节跑道坑UP与量坑UV.ppt
- 管理会计_第二章成本形态分析.ppt
- 羊水作用及产检诊断.ppt
- 股票入门基础K线图.pptx
- 第6讲 保护行动计划(CAP)090503.ppt
- 蔡雪月考虑公平的绿色供应链定价与产品绿色度决策.pptx
- 经验分享---敏捷开发流程.ppt
- 西方经济学M第十二章IS-LM模型2016.ppt
- 第7次课ppt_50c1bsj8d6ejkks2bs0c2btq1bsl0bit7bkk5btqnn1biku12f12f16z.ppt
- 第7次课_50c1bsj8d6ejkks2bs0c2btq1bsl0bit7bkk5btqnn1biku12f12f16z.ppt
文档评论(0)