- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 编译预处和动态存储分配
第九章 编译预处理和动态存储分配
考核知识点宏定义、不带参数的宏定义、带参数的宏定义
文件包含
动态存储分配
重要考点提示
理解并会使用宏定义
使用常用函数的“文件包含”
9.1宏定义
1.不带参数的宏定义
不带参数的宏定义命令行形式如下:
#define 宏名 替换文本 或#define 宏名
在define宏名和宏替换文本之间要用空格隔开。
说明:宏名一般习惯用大写字母表示,宏替换的过程实质上是原样替换的过程。宏定义可以差事少程序中重复办公室某些字符串的工作量。
注意:可以用#undef命令终止宏定义的作用域。
例如:
#define PI 3.14
main()
{
}
#undef PI
在进行宏定义时,可以引用已定义的宏名,例如:
#define R 15.5
#define PI 3.14
#define L 2*PI*R
2.带参数的宏定义
定义的一般形式为:
#define 宏名(参数表) 字符串
宏定义不只进行简单的字符串替换,还要进行参数替换,例如:
#define MV(x,y)((x)*(y))
...
a=MV(5,2);/*引用带参的宠名*/
b=6MV(a+3,a);
以上宏定义命令行中,MV(x,y)称为“宏”,其中MV是一个用户标识符,称为宏名。宏名和左括号“(”必须紧挨着,它们之间不能留有空格,其后圆括号中由称为形参的标识符组成,并且可以有多个形参,各参数之间用逗号隔开,“替换文本”中通常应该包含有形参。
执行过程:如果程序中有带实参的宏,则按#define便衣行中指定的字符串从左到右进行了置换。如果字符串中包含宏中的形参(如x,y),则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参。如果宏定义中的字符串中的字符不是参数字符(如(x*y)中的“*”号),则保留。这样就形成了置换的字符串。
提示:和不带参数的宏定义相同,同一个宏名不能重复定义。在替换带参数的宏名时,圆括号必不可少。
带参数的宏和函数之间有一定类似之处,在引用函数时也是在函数右面的括号写实参,也要求实参与形参数目相等,但两者是不同的,主要表现在:
⑴函数调用时,要求实参、形参类型相匹配,但在宏替换中,对参数没有类型的要求。
⑵函数调用时,先求出实参表达式的值,然后代入形参,而使用带参数的宏只是进行简单的字符串替换。
⑶函数调用是在程序运行时处理的,要分配临时的内存单元,还要占用一系列的处理时间。宏替换在编译预处理时完成,因此,宏替换不占运行时间,不被分配内存单元,不进行值的传递,也没有“返回值”的概念。
⑷使用宏的次数较多时,宏展开后源程序变长,而函数调用不会。
9.2文件包含
1.文件包含
所谓文件包含,是指在一个文件中包含另一个文件的全部内容。C语言用#define命令行来实现文件包含的功能。形式如下:
# include “文件名”或# include 文件名
在预编译时,预编译程序将用指定文件中的内容来替换此命令行。如果文件名用双引号括起来,则系统先在当前源程序所在的目录内查找指定的包含文件,如果找不到,再按照系统指定的标准方式到有关目录中去寻找。如果文件名用尖括号括起来,系统将直接按照系统指定的标准方式到有关目录中去寻找。
说明:
⑴# include命令行通常书写在所用文件的最开始部分,所以有时也把包含文件称做“头文件”。头文件名可由用户指定,其后缀不一定用”.h”。
⑵当包含文件被修改后,对包含该文件的源程序必须重新进行编译连接,这样才会使修改后的文件生效。
⑶在一个包含文件中还可以包含另外的文件。
⑷在一个程序中可以有多个#include命令行。
9.3条件编译
1.条件编译
在一般情况下,源程序中所有的行都参加编译(注释行除外),但是有时希望其中一部分语句只有在满足某些条件时才进行编译。也就是说要为一部分语句指定编译的条件,如果编译条件成立,就对这部分语句进行编译,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行了编译,而当不满足时则编译另一组语句,条件编译有以下3种形式:
⑴#if表达式
程序段1
#else
程序段2
#endif
它的作用是当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2。可以事先给定一定条件,使程序在不同的条件下执行不同的功能。
⑵#indef 标识符
程序段1
#else
程序段2
#endif
它的作用是当指定的樯符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2,其中#else部分可以没有。可以参考if语句来理解。
⑶#ifdef 标识符
程序段1
#else
程序段2
#endif
它的作用是若标识符未被定义过,则编译程序段1,否则编译程序段2。
9.4关于动态存储的函
您可能关注的文档
最近下载
- 2023年阳江市社区工作者招聘考试真题 .pdf VIP
- 《高效课堂和有效教学模式研究》结题报告材料.pdf VIP
- 生猪、牛、羊、鸡、鸭、鹅屠宰HACCP计划模式表.pdf VIP
- 2024-2025学年广西壮族自治区小升初英语真题(含答案).pdf VIP
- 环保项目设备供货及服务保障措施.docx VIP
- 初中物理每日默写知识点(1)_Decrypted.pdf VIP
- 人教版信息科技四年级《多彩的数字世界》教学PPT课件.pptx VIP
- 我的幸福大家庭.pptx VIP
- 安全教育开学第一课主题班会PPT课件.pptx VIP
- (2025秋新版)人教版数学二年级上册教学计划.docx VIP
文档评论(0)