命名空间和预处理.ppt_第1页
命名空间和预处理.ppt_第2页
命名空间和预处理.ppt_第3页
命名空间和预处理.ppt_第4页
命名空间和预处理.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章命名空间和预处理 基本要求1 掌握命名空间的声明 使用using引入命名空间 2 了解嵌套的命名空间的定义和命名空间限定符 的使用 3 掌握 define if elif else endif undef error warning region endregion和 program指令的使用 第七章命名空间和预处理 主要内容7 1命名空间7 2预处理 7 1命名空间 命名空间 namespace 定义了一个声明区域 它提供了将一组名称与另一组名称进行区别的方法 本质上 就是使得一个命名空间中的名称不会与另一个命名空间中相同的名称冲突 前面的程序中我们使用了 NET的命名空间System 在过去的几年里 在类库 第三方控件及用户代码中出现了大量的类 方法 属性 因此命名空间就显得十分重要了 如果不区分命名空间 那么索引的名称就只能共享同一个全局空间 进而不可避免地引发命名冲突 比如 如果用户在自己的命名空间中定义了类Sort 它可能与第三方类库中的Sort类相冲突 幸运的是 命名空间可以避免这样的冲突发生 它可以限制声明在其中的名称的可见性 7 1命名空间 7 1 1命名空间的声明使用namespace关键字可以声明一个命名空间 其基本形式为 namespacens name members 其中 ns name是命名空间的名称 所有定义在命名空间中的内容都被限制在该命名空间的范围内 因此 命名空间实际上定义了一个范围 members是命名空间的成员列表 在命名空间中用户可以定义类 结构体 委托 枚举 接口或另一个命名空间等成员 例P7 1 7 1命名空间 7 1 1命名空间的声明命名空间的作用在于 在一个命名空间中声明的名称不会与其他命名空间中声明的同名的名称产生冲突 例P7 2 7 1 2using命令如果程序需要频繁地引用某个命名空间中定义的成员 那么如果每次都指定命名空间就很麻烦 使用using命名可以解决这个问题 前面的例子中我们使用using来引入 NET的命名空间System 此外 用户定义的命名空间也可以使用using引入 using指令有两种形式 如下 7 1命名空间 7 1 2using命令usingns name 形式一或usingalias ns name 形式二其中ns name是命名空间的名称 alias是为命名空间指定的别名 例如 usingCounter usingCC Counter 7 1命名空间 7 1 3嵌套的命名空间一个命名空间可以声明在另一个命名空间中 称为命名空间的嵌套 例P7 3 另外 使用单个namespace也可以嵌套命名空间 方法是使用句点将每一个命名空间隔开 例如 namespaceNS1 NS2 members 例P7 3的另一种表示形式 7 1命名空间 7 1 4使用命名空间限定符 尽管命名空间可以帮助避免命名冲突 但不能完全消除这种冲突 如果在两个不同的命名空间中声明了同名的成员 如果两个不同的命名空间中声明了同名的成员 而应用程序又同时引入了这两个命名空间 就会发生名称冲突 在这种情况下 我们可以使用命名空间限定符 来显示地指定希望使用的命名空间 命名空间限定符 是C 2 0中新引入的功能 运算符的基本形式为 namespace alias identifier其中 namespace alias是命名空间的别名 identifier是该命名空间中成员的名称 例P7 4 7 1命名空间 7 1 4使用命名空间限定符 例P7 4中创建了两个命名空间 Counter1和Counter2 这两个命名空间中都定义了CountDown类 并且都被using语句引入程序 因此 在Main方法中使用下面的语句创建对象cd的时候就会出现错误 其原因在于两个命名空间Counter1和Counter2中都定义了类CountDown 并且都被引入到程序中 在使用下面的语句创建CountDown类型的对象cd时 到底该使用哪一个命名空间中的类CountDown 编译系统无法确定 从而产生二义性错误 为解决这样的错误 就必须使用 运算符来实现 CountDowncd newCountDown 使用运算符 必须先为要限定的命名空间定义一个别名 接着使用别名来限定具有二义性错误的元素即可 7 2预处理 C 定义了多个预处理指令 它们可以改变编译系统解释源程序文件的方式 在把程序翻译为目标代码之前 预处理指令首先对源文件中的文本产生作用 即编译哪些文本 C 中所有的预处理指令都以 开头 并且每个预处理指令都单独占用一行 C 2 0中的预处理指令如表7 1所示 表7 1C 预处理指令 7 2预处理 7 2 1 define指令 define指令用于定义一个称为符号 symbol 的字符序列 if和 elif指令可以判断某个符合是否已经存在 并据此控制编译过程 define指令的基本形式如下 definesymbol注意 这里没有以分号结束 因为它不是C 的语句 而是一个预处理指令 define和symbol之间至少要用一个空格隔开 C 该指令不同于C和C 中的 define指令 C C 中是用来定义宏的 例如 defineWindows 7 2预处理 7 2 2 if elif else和 endif指令 if指令的基本形式如下 ifsymbol expression 1statement sequence 1 elifsymbol expression 2statement sequence 2 elsestatement sequence n endif 7 2预处理 7 2 2 if elif else和 endif指令其中 symbol expression i是一个symbol或多个symbol构成的逻辑表达式 如果表达式的值为真 则编译statement sequence i 如果所有的symbol expression都为假 则编译statement sequence n例P7 5 7 2预处理 7 2 3 undef指令 undef指令可以取消之前定义的符号 基本形式如下 undefsymbol例如 defineSMALL 这个位置之前SMALL是被定义的 ifSMALL undefSMALL 这个位置之后SMALL就没有定义了 7 2预处理 7 2 4 error指令 error指令主要用于调试 它可以迫使编译器停止编译 该指令的基本形式如下 errorerror message其中 error message是错误信息 例如 errorAnerroroccurredhere 7 2 5 warning指令 warning类似于 error 不过它产生的是警告消息而不是错误消息 因此 编译过程不会停止 其基本形式如下 warningwarning message 7 2预处理 7 2 6 line指令 line指令可以为它所在的文件设置行号和文件名 编译过程中如果出现错误或警告就会用到这里的行号和文件名 line指令的基本形式为 linenumber filename 其中 number是任意的正整数 它用作新行的行号 可选的filename表示一个任意有效的文件标识符 它被用作新的文件名 line主要用于调试和特殊的应用程序 line指令还有两个选秀 一个是default 它根据原来的位置返回行号 其用法为 linedefault另一个是hidden 在逐步调试一个程序的时候 hidden选项允许编译器跳过该指令与下一个不包含hidden选项的 line指令之间的行 其用法如下 linehidden 7 2预处理 7 2 7 region和 endregion指令 region和 endregion用于定义一个区域 该区域可以在VisualStudioIDE的大纲视图中被扩展或收缩 其基本形式如下 regionregion name code endregion其中 region name用于指定区域的名称 7 2预处理 7 2 8 program指令 program指令是C 2 0新增的 它用于给出指令 例如为编译器指定选项 其基本形式如下 programoption其中 option是传递给编译器的指令 在C 2 0中 program支持两个选项 一个是warning 它用于启用或禁用某个具体的编译器警告 对于的命名如下 programwarningdisablewarnings 禁用警告 programwarningrestorewarnings 启用警告 7 2预处理 7 2 8 program指令其中 warnings是一个逗号分隔的警告编号列表 例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论