- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机二级考试chap13 编译预处理
本章重点 13.1 编译预处理 13.2 动态存储分配 13.1 编译预处理 13.1.1 宏替换 1.无参数的宏定义 宏定义是指用一个指定的标识符(即名字)来代表程序中一个字符串。它的一般形式为: #define 宏名 字符串 或 #define 宏名 例如: #define SIZE 10 标识符SIZE称为宏名,此命令执行后,预处理程序对源程序中的所有名为SIZE的标识符用10来替换,此过程就称为“宏替换”。 其中,“#”表示这是一条预处理命令,“define”为宏定义命令,“宏名”为一个合法的标识符,“字符串”可以是常数、表达式或语句,甚至可以是多条语句。 说明: (1)宏定义与变量定义含义不同,它只作字符替换,并不分配内存空间,也不能认为是赋值。 (2)宏定义是用宏名代替一个字符串,是一种机械的置换,不作任何语法检查。 (3)宏定义结尾不必加分号。如果加了分号,则被认为是字符串的一部分,即在预处理时,分号也被一起替换。 (4)替换文本中也可以包含已定义过的宏名。 ( 5)宏名的有效范围从定义之后到本源文件结束,出了这个文件,宏名便失却了作用 (6)若宏名出现在一对双引号中,将不会产生宏替换。例如,如果ADD是已经定义的宏名,则不能用与它相关的替换文本来替换 printf(“ADD”)中的ADD。 (7)宏定义还可以定义运算符、表达式,甚至可以把输出格式语句作为宏定义。 (8)替换文本并不替换用户标识符中的成分。 2.带参数的宏定义 宏定义除了允许定义符号常量外,还可以用于定义带有参数的宏。在宏定义中的参数称为形式参数,简称形参;在宏调用中的参数称为实际参数,简称实参。带参数的宏定义一般形式为: #define 宏名(形参表) 字符串 在编译预处理时,程序中凡是带实参的宏,一律按#define命令行中指定的字符串从左到右进行替换。 对于字符串中的字符不是参数字符(如*号),则保留不变。 说明 (1)宏名与形参表之间不能有空格出现 (2)在定义带参数的宏是,一对圆括号必不可少,圆括号中实参的个数应该与形参个数相同,若有多个参数,之间用逗号隔开。 (3)宏替换时,实参不能替换扩在双引号中的形参。 (4)带参数的宏与带参数的函数的区别: a. 带参数的宏仅是简单机械的字符替换,并不计算实参表达式的值; b. 宏名无类型,宏参数也不存在类型问题,因此宏定义中的字符串可以是任何类型的数据,而函数中的实参和形参都要定义类型,两者要求一致; c. 宏替换是预编译处理时进行的,不占运行时间,而函数调用则是在程序运行时进行的,占用运行时间(如分配单元、保留现场、值传递、返回等); d. 宏是原样替换,展开后源程序增长,而函数调用则不会。 以下程序运行结果是() #include stdio.h #define N 5 #define M N+1? #define f(x) (x*M) main() { int i1, i2; i1=f(2); i2=f(1+1); printf(”%d %d\n”, i1,i2); } 11 7 13.1.2 文件包含 在用C语言开发程序时,我们可以把一些宏定义按照功能分别存入不同的文件中,当我们需要使用某类宏定义时,就无需在程序中重新去定义,而只要把这些宏定义所在的文件包含在程序的开头就可以了。 文件包含是指一个源程序文件将另一个指定文件的全部内容包含进来,即将另一个文件包含到本文件之中。这一过程通过预处理命令#include来完成。文件包含预处理语句的一般形式为: #include 包含文件 或 #include “包含文件” 其中,包含文件名是磁盘中文本文件的名字。例如: #include stdio.h 或 #include stdio.h 在编译时,预编译程序将用指定文件中的内容来替换此命令行。 13.2 动态存储分配 此前,我们用于存储数据的变量和数组都必须在说明部分进行定义。C编译程序通过定义语句了解它们所需存储空间的大小,并预先为其分配适当的内存空间。这些空间一经分配,在变量或数组的生存期内是固定不变的。所以这种方式也称为“静态存储分配”。 C语言中还有一种“动态存储分配”的内存空间分配方式,在程序执行期间需要空间来存储数据时,通过申请分配指定的内存空间;当有闲置不用的空间时,可以随时将其释放,由系统另作它用。用户可以通过调用C语言提供的标准库函数来实现动态分配,从而得到指定数目的内存空间或释放指定的内存空间。 13.2.1 malloc函数和free函数 1.malloc函数 malloc函数的
您可能关注的文档
最近下载
- 专题02 宇宙中的地球-5年(2020-2024)高考1年模拟地理真题分类汇编(北京专用)(解析版).docx VIP
- 城市绿地分类标准 .pdf VIP
- 营养指导员题库.docx VIP
- 专题01 地球和地图-5年(2020-2024)高考1年模拟地理真题分类汇编(北京专用)(解析版).docx VIP
- 四年级【语文(统编版)】古诗三首(第一课时)课件 .pptx
- 质量管理体系工具统计技术.pptx VIP
- 2022年茅台考试真题及答案——计算机专业.pdf
- 发电机短路试验中转子接地保护误动作分析及关键问题探讨.pdf VIP
- Silvaco傻瓜教程—张林—长安大学—2018.06.pdf
- SpringBoot学习笔记(实用完整版).pdf VIP
文档评论(0)