- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
*第9章编译预处理9.1宏定义命令文件包含命令9.2条件编译命令9.3本章内容导读本章主要介绍宏定义、文件包含和条件编译三种编译预处理命令。通过学习本章,读者应掌握以下内容:掌握宏定义及其使用方法;了解文件包含命令的格式和使用方法;了解条件编译命令的各种格式和功能。编译预处理是指对源程序进行编译之前,先对源程序中的各种预处理命令进行处理;然后再将处理结果和源程序一起进行编译,以获得目标代码。分类无参数宏定义命令有参数宏定义命令功能用于定义程序中的符号常量、类型别名、运算式代换和语句代换等。优势提高源程序的可维护性。提高源程序的可移植性。减少源程序中重复书写字符串的工作量。9.1宏定义命令格式#define宏名字符序列其中“define”为宏定义命令;“宏名”是标识符的一种,通常用大写字母表示,以便于与变量区别;“字符序列”可以是常数、表达式、格式串等。说明宏名一般用大写字母,以便与变量区别。但这并非是规定。宏定义不是C语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。宏展开时,预处理程序仅按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。宏定义命令#define出现在函数的外部,宏名的有效范围是从定义命令之后,到本文件结束。通常,宏定义命令放在文件开头处。进行宏定义时,可以引用已定义的宏名。对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。例如#definePI3.141591、无参宏定义9.1宏定义命令说明在定义无参宏时,如果“字符序列”是一个常量,则相应的“宏名”就是一个符号常量。恰当命名的符号常量,除具有宏定义的上述优点外,还能表达出它所代表常量的实际含义,从而增强程序的可读性,例如:#defineEOF-1 /*文件尾*/#defineNULL0 /*空指针*/#defineMIN1 /*极小值*/#defineMAX31 /*极大值*/#defineSTEP2 /*步长*/提高源程序的可修改性,修改宏定义中的“字符序列”可以起到一改全改的作用。1、无参宏定义9.1宏定义命令格式#define宏名(参数表)带参数的字符序列调用和展开宏调用格式:宏名(实参表)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。说明定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。在定义有参宏时,在所有形参外和整个字符串外,均加一对圆括号。2、有参宏定义9.1宏定义命令有参宏与有参函数的区别(1)调用有参函数时,先计算实参表达式的值,然后再传给形参。而展开有参宏时,不计算实参表达式的值,只将实参简单地替换形参。(2)有参函数中,实参和形参需要定义类型,且类型一致;而有参宏中,形参是没有类型的,因此用于替换的实参,什么类型都可以。(3)无论调用多少次有参函数,都不会使目标程序变长,但每次调用都要占用系统时间进行调用现场的保护和恢复;而有参宏,由于宏展开是在编译预处理时进行的,所以不占运行时间,但是每使用一次,都会使目标程序增大。(4)有参函数在程序运行时进行值的处理,需要分配临时的内存单元;而有参宏展开是编译预处理时进行,展开时不分配内存单元,不进行值的传递处理。宏定义中,对参数是否加括号是有区别的。#definePOWER(x)((x)*(x))若a=4,b=6,则POWER(a+b)=((4+6)*(4+6))=100#definePOWER(x)(x*x)若a=4,b=6,则POWER(a+b)=(4+6*4+6)=349.1宏定义命令定义一个源文件可以将另一个源文件的全部内容包含进来。格式格式一:#include文件名格式二:#include文件名注意:(1)一般被包含文件以.h为后缀。(2)一个#include命令只能指定一个被包含文件。(3)若file1.c包含file2.h,而file2.h又包含file3.h,则可在file1.c中有两个包含命令,且file3.h的包含命令行在file2.h的包含命令
您可能关注的文档
- 第2章 C语言概述.ppt
- 第3章 数据类型、运算符和表达式.ppt
- 第4章 结构化程序设计.ppt
- 高级语言程序设计 课件 第6章 函数.ppt
- 第8章 结构体类型和自定义类型.ppt
- 高级语言程序设计 课件 第10章 文件.ppt
- 高级语言程序设计 课件 第5章 数组.ppt
- 高级语言程序设计 课件 第1章 概述.ppt
- 高级语言程序设计 课件 第7章 指针.pptx
- 统编版(部编版)语文二年级上册《狐假虎威》教学设计.docx
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)