版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章预编译处理编译预处理格式
10.1宏定义10.2文件包含本章主要内容10.3条件编译
编译预处理格式作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头占单独书写行语句尾不加分号10.1
宏定义
宏定义:所谓宏定义是指用一个指定的标识符代表一个具有特殊意义的字符串,命令中的标识符称为宏名。在编译预处理时,对程序中出现的宏名都用宏定义中的字符串去替换,这种将宏名替换成字符串的过程称为宏展开或宏代换。在程序编写中,经常用宏定义代替设定的常量,这样的好处是,在后期调整常量数值的时候,只需要更改宏定义的内容即可,提高了编写效率。
10.1
宏定义
10.1.1不带参数的宏定义的一般格式如下:#define宏名宏体预处理时,将把程序中该宏定义之后的所有宏名用宏体替换。我们以前介绍过的符号常量的定义就是这种宏处理的一种应用。例如:#definePI3.1415926表示用指定标识符PI来代替“3.1415926”这个字符串,在编译预处理时,把程序中在该命令以后的所有PI都用“3.1415926”代替,这一过程称为宏展开。在这里宏名就是PI,宏体就是3.1415926。
10.1
宏定义10.1.2带参数的宏定义带参数的宏定义的一般格式为:#define宏名(形参列表)宏体在编译预处理时,将程序中该命令后出现的带参的宏用宏体进行置换,但在替换时宏体中的形参要用相应的实参置换。例如:#defineS(a,b)2*a*barea=S(5,3);在这里定义的宏名S带了两个形式参数a和b,在后面程序中出现的宏调用S(5,3)中的参数在预处理时分别代替a和b,宏展开为:area=2*5*3;10.1
宏定义应用说明:(1)宏名一般用大写字母表示,以便和变量名(小写)相区别。(2)宏代换时不做语法检查,只做简单替换,宏体中可以含任何字符,可以是常量,也可以是表达式,预定义对它不做任何语法检查。(3)宏处理的有效范围为定义命令开始到本源文件结束。(4)当宏处理在源文件中局部使用时,可以从#define定义开始,到#undef定义结束。(5)宏定义不是C语句,不要在命令末尾加分号。如果加上分号,系统会认为分号是替换字符串的一部分。(6)在进行宏处理时,可以引用已定义的宏名,进行层层置换。但如果程序中出现用双引号括起来的宏名,则不进行置换。10.2文件包含文件包含是指一个源文件可以将另一个源文件的全部内容包含进来,即将一个文件的内容添加到另一个文件中。文件包含的一般格式如下:#include<包含文件名>或#include"包含文件名"功能:在编译源程序前,用包含文件的内容置换该预处理命令,也就是从磁盘按包含文件名读取文件,然后,将它嵌入到源程序中该预处理命令处,使它成为源程序的一部分。10.2文件包含
由C语言系统提供的包含文件,都以“.h”为文件的扩展名。表10-1中列出了ANSIC(以及ISOC)中提供的常用包含文件。每个函数库都与某个包含文件相对应。当调用标准库函数时,应注意把相对应的包含文件用#include命令包含到所引用的程序中来。10.2文件包含使用说明(1)一个#include命令只能包含一个文件,若要包含多个文件,只能逐个进行包含。(2)被包含的文件也可以包含其他文件,即文件包含可以嵌套。(3)如果一个程序A被包含到了多个程序中,一旦程序A的内容进行了修改,则包含它的所有文件都需要重新编译。(4)在#include命令中,文件名可以用双引号或尖括号括起来,两种格式的区别在于,使用<>符号括起来的格式时,编译系统将按照系统设定的标准目录搜索该文件,这种方式也称为标准方式;使用""符号括起来的格式时,编译系统将首先在当前目录中查找该文件,再按标准目录查找直到找到该文件为止。10.2文件包含10.3条件编译条件编译的基本概念如下:条件编译的行为类似于C语言中的if…else…条件编译是预编译器指示命令,用于控制是否编译某段代码。条件编译指令:#if、#else、#elif和#endif指令#ifdef和#ifndef10.3条件编译条件编译有三种格式:1.格式1#ifdef标识符程序段1#else程序段2#endif它的功能是当#ifdef后面的标识符已经被#define命令定义过,在程序编译时只编译程序段1;否则编译程序段2。10.3条件编译格式2#ifndef标识符程序段1#else程序段2#endif它的功能是如果#ifndef后面的标识符没有被#define定义过,则编译程序段1,否则编译程序段2,与第一种形式的功能正好相反。10.3条件编译格式3#if表达式程序段1#else程序段2#endif它的功能是当#if后面的表达式为真(非0)时编译程序段1;否则编译程序段2。这里的表达式可以作为一个条件,使程序在不同的条件下执行不同的程序段。10.3条件编译应用说明:(1)条件编译可以作为调试程序的有效工具,比如在调试程序时需要输出一些信息,而调试完成后这些信息就不再需要了,就可以利用条件编译来实现。(2)条件编译的三种形式虽然不同,但从作用上讲都是为了控制某个程序段的执行与否,前两种的控制取决于某个字符串是否被定义,而第三种形式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 202广东揭阳普宁市部分医疗卫生事业单位招聘临时聘用制医务人员283人笔试备考试题及答案详解
- 2026年东辽县带编教师招聘考试参考题库及答案解析
- 2026年汝南县带编教师招聘笔试备考试题及答案解析
- 2026年大新县带编教师招聘考试模拟试题及答案解析
- 2026年凤山县带编教师招聘考试参考题库及答案解析
- 2026年和布克赛尔蒙古自治县带编教师招聘笔试备考试题及答案解析
- 2026年林口县带编教师招聘考试备考题库及答案解析
- 2026年永善县带编教师招聘笔试参考题库及答案解析
- 2026年郧西县带编教师招聘笔试模拟试题及答案解析
- 2026年郧西县带编教师招聘考试备考试题及答案解析
- 2026年患者投诉处理与沟通技巧课件(高清可编辑课件)
- 施工现场安全生产事故应急救援预案
- 1.2小学科学苏教版(新教材)六年级上册第一单元第2课《燃烧与空气》课件(含AI赋能)
- 选矿生产过程中主要危险危害因素分析培训
- 2026秋小学新版苏教版数学五年级上册教学设计(附目录)适用于新课标
- 2026年西藏自治区日喀则市法检系统书记员招聘考试模拟试题及答案详解
- 卵巢癌诊疗指南核心更新2026
- 《老年防烫伤专科护理|安全防护 + 全套护理措施》
- 北森测评题库及答案2026
- 23J916-1:住宅排气道(一)
- Unit 6 Understanding ideas Hot!Hot!Hot!课件高中英语外研版(2019)必修第三册
评论
0/150
提交评论