程序设计基础(C语言版)课件 第10章 预编译处理_第1页
程序设计基础(C语言版)课件 第10章 预编译处理_第2页
程序设计基础(C语言版)课件 第10章 预编译处理_第3页
程序设计基础(C语言版)课件 第10章 预编译处理_第4页
程序设计基础(C语言版)课件 第10章 预编译处理_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论