- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第5章数据的共享与保护
#define 和 #undef 指令 #define 也称宏定义指令,其最初是为C语言设计的。但是 #define 能完成的一些功能,能够被C++引入的一些语言特性很好地替代。 ⑴ 不带参数的宏定义 #define PI 3.14 —— const double PI=3.14; ⑵ 带参数的宏定义 #define MU(X,Y) ((X)*(Y)) —— 内联函数 #define 和 #undef 指令 ⑶ 用 #define 定义空符号: #define MYHEAD_H 将该符号配合条件编译指令一起使用,可以起到一些特殊作用。 #undef 的作用是删除由#define定义的宏。 条件编译指令 使用条件编译指令,可以限定程序中的某些内容要在满足一定条件的情况下才参与编译。 因此,利用条件编译可以使同一个源程序在不同的编译条件下产生不同的目标代码。 例如,可以在调试程序时增加一些调试语句,以达到跟踪的目的,并利用条件编译指令,限定当程序调试好后,重新编译时,使调试语句不参与编译。 条件编译指令 常用的条件编译语句有下列5种形式: ⑴ 形式一 #if 常量表达式 程序段 // 当“常量表达式”非零时编译本程序段 #endif ⑵ 形式二 #if 常量表达式 程序段1 // 当“常量表达式”非零时编译本程序段 #else 程序段2 // 当“常量表达式”为零时编译本程序段 #endif 条件编译指令 ⑶ 形式三 #if 常量表达式1 程序段1 // 当“常量表达式”非零时编译本程序段 #elif 常量表达式2 程序段2 // 当“常量表达式1”为零、 “常量表达式2”非零时编译本程序段 … … #elif 常量表达式n 程序段n // 当“常量表达式1” 、…、 “常量表达式n-1”均为零且“常量表达式n”非零时编译本程序段 #else 程序段n+1 // 其他情况下编译本程序段 #endif 条件编译指令 ⑷ 形式四 #ifdef 标识符 程序段1 #else 程序段2 #endif 如果“标识符”经#define定义过,且未经#undef删除,则编译程序段1,否则编译程序段2。 如果没有程序段2,则#else可以省略: #ifdef 标识符 程序段1 #endif 条件编译指令 ⑸ 形式五 #ifndef 标识符 程序段1 #else 程序段2 #endif 如果“标识符”未经#define定义过,且未经#undef删除,则编译程序段1,否则编译程序段2。 如果没有程序段2,则#else可以省略: #ifndef 标识符 程序段1 #endif defined 操作符 defined是一个预处理操作符,而不是指令,因此不要以#开头。defined操作符使用形式为: defined(标识符) 若“标识符”在此前经#define定义过,并且未经#undef删除,则上述表达式为非0,否则上述表达式为0。下面两种写法完全等效: #ifndef MYHEAD_H #define MYHEAD_H …… #endif #if !defined(MYHEAD_H) #define MYHEAD_H …… #endif 不使用条件编译的头文件 由于文件包含指令可以嵌套使用,在设计程序时要避免多次重复包含同一个头文件,否则会引起变量及类的重复定义。 //main.cpp #include file1.h #include file2.h int main() { … } //file1.h #include head.h … //file2.h #include head.h … //head.h … class Point { … }; … 使用条件编译的头文件 //head.h #ifndef HEAD_H #define HEAD_H … class Point { … }; … #endif 在前面的例子中,由于#include指令的嵌套使用,使得头文件head.h被包含两次,因此编译时系统会指出错误:类Point被重复定义。 为了避免这种情况,就要在可能被重复包含的头文件中使用条件编译指令。 用一个唯一的标识符来标记某文件是否已参加过编译,如果已参加过编译,则说明该程序段是被重复包含的,编译时将忽略重复部分。 将文件“head.h”改写如右侧所示: 第5章 数据的共享与保护 1、标识符的作用域与可见性 2、对象的生存期 3、类的静态成员(微视频) 4、类的友元 5、共享数据的保护(微视频) 6、多文件结构和编译预处理命令(微视频) 7、综合实例——个人银行账户管理程序(微视频) 8、小
文档评论(0)