




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章编译预处理和动态存储分配 高级语言的源程序 编译 连接 目标代码 编译预处理 上机过程 13 1编译预处理在C编译程序对源程序进行编译前 由编译预处理程序对预处理命令行 以 号开始的预处理命令行 进行处理 然后对预处理后的源程序进行编译 连接 产生可执行的目标代码 C主要提供三种预处理命令 宏定义 文件包含和条件编译 本章重点介绍前两种 1 宏定义 宏替换 有两种 不带参数宏定义和带参数宏定义 1 不带参数宏定义形式 define宏名替换文本其中 宏名是用户定义的标识符 替换文本是字符串 作用 编译预处理程序对源程序中所有表示宏名的标识符用字符串来替换 例如 defineN100编译预处理程序对源程序中所有N用100替换 例 使用不带参数的宏定义 defineN10voidmain inta N i for i 0 i N i a i i i for i 0 i N i printf d a i printf n 说明 1 表示宏名的标识符习惯用大写字母表示 以便与变量名区别 这并非规定 2 宏定义的位置一般写在程序的开头 3 替换文本中可包含已定义过的宏名 例 definePI3 14159 defineN100 defineMN PI最后一个宏定义 编译预处理程序对源程序中所有M用100 3 14159替换 4 宏定义行的最后一个字符是 表示下一行内容是本行的续行 例 defineLEAP YEARyear 4 0 例 不带参数的宏定义 definePRprintf n voidmain inti j k i 15 j 9 printf d d i j i j PR 展开 printf n printf d d i j i j PR 展开 printf n 2 带参数的宏定义形式 define宏名 形参表 替换文本其中 宏名是用户定义的标识符 形参表指定的形参 由标识符命名 形参之间用逗号分开 替换文本是字符串 通常包含指定的形参 作用 编译预处理程序对源程序中出现的带实参的宏 用实参对 define命令行中的替换文本 字符串 中形参进行替换 例如 defineF x y x x y y intd1 d1 F 3 2 10 d1 3 3 2 2 10 把实参3和2代替宏定义中形参x和y 即F 3 2 表示3 3 2 2 例 带参数的宏定义 defineM x y x y x yvoidmain inti j k i 5 j 10 k 10 M i j 展开 k 10 5 10 5 10 printf d n k 说明 1 调用带参数的宏时 实参与形参的个数应相同 2 实参可以是常量 变量或表达式形式 3 带参数宏替换与函数调用有类似之处 但前者对参 数没有类型的要求 4 宏替换中 实参不能替换双引号中的形参 5 与不带参数的宏定义一样 同一个宏名不能重复定义 3 终止宏定义形式 undef已定义宏名例如 definePI3 14159main undefPI从终止宏定义 undefPI 后PI无定义 不代表3 14159了 使用宏定义的优势 1 宏替换不占程序运行时间 只占编译时间 2 便于阅读3 修改方便注意 宏定义最后没有 2 文件包含就是在一个文件中 将已有的另外一个文件的全部内容包含进来 由于C的库函数很多 将这些函数根据类型不同分类 分别放在不同的文件中 例如 数学函数 math h 输入 出 stdio h 字符函数 ctype h 字符串 string h 动态分配 malloc h其它 tdlib h 编程时 使用哪个文件中的函数 将该文件用文件包含的形式 写在程序的前面 C语言提供了 include命令行 实现 文件包含 功能 其一般形式为 include 文件名 或 include 编译预程序将用指定的文件中的内容替换此命令行 如果文件名用双引号括起来时 系统先在用户当前目录查找要包含的文件 若找不到 再按标准方式 系统指定的目录 查找 如果文件名用尖括号括起来时 按标准方式查找 说明 1 include命令行的位置一般写在源程序的开头 文件名后缀不一定是 h 2 包含文件 头文件 中 可包含一些 define命令行 外部说明或对库函数的原形说明 例 将格式宏做成头文件format h 头文件format h内容如下 definePRprintf defineNL n defineD d n defineS s 主文件file1 c内容如下 include includevoidmain inta 2 b 4 charst CHINA PR D a 展开 printf d n a PR D b 展开 printf d n b PR S st 展开 printf s st PR NL 展开 printf n 3 当包含文件 头文件 修改后 对包含头文件的源程序必须重进行编译连接 4 在一个程序中允许有多个 include命令行 5 在包含文件 头文件 中还可以其他文件 例 在包含文件 头文件 file2 h中包含文件file3 h 见下面图示 file1 cfile2 hfile3 h 例 文件包含的程序 include include includevoidmain floatx y chars1 book s2 20 x 1 5 y sqrt 12 a sin a 3 1416 180 strcpy s2 s1 printf f n y printf s n s2 说明 包含文件也可以是自己编的一些函数 放在一个文件中 使用时只要在程序前部包含进去 文件中的函数可以在程序中调用 节省程序开发时间 3 条件编译有条件的对源程序的某部分进行编译 减少目标代码的存储空间 有三种形式 形式1 ifdef标识符 程序段1 else 程序段2 endif标识符 define定义过 则程序段1被编译 否则 程序段2被编译 可选 形式2 ifndf标识符 程序段1 else 程序段2 endif标识符没用 define定义过 则程序段1被编译 否则 程序段2被编译 形式3 if表达式 程序段1 else 程序段2 endif表达式为非0 则程序段1被编译 否则 程序段2被编译 13 2动态存储分配在程序执行期间根据需要可动态分配存储空间 不用时可释放 C语言提供的四个标准函数 malloc calloc free和realloc可实现前述功能 1 malloc函数和free函数 1 malloc函数调用形式malloc size 其中 size它的类型为unsingedint 功能 分配size个字节存储间 返回指向存储空间首地址的基类型为void的地址 若分配的存储空间不足 函数返回空 NULL 2 free函数调用形式free P 其中 P类型为指针变量 指向动态分配的地址 功能 将指针P所指的存储空间释放 无函数返回值 例 函数malloc和free的使用 shortint pi float pf pi short malloc 2 pi指向shortint2个字节地址 pf float malloc 4 pf指向float4个字节地址 free Pi 释放指针Pi所指的存储空间 free Pf 释放指针Pf所指的存储空间 在申请动态存储空间时 若不能确定数据类型所占字节数 可以使用sizeof运算符来求得 例如 shortint pi float pf pi int malloc sizeof int pf float malloc sizeof float 这是一种常用的形式 2 calloc函数调用形式 calloc n size 其中 n size类型均为unsing
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏腾海物业管理有限公司招聘国有企业人员10人笔试参考题库附带答案详解
- 2025年河北顺德投资集团有限公司公开招聘劳务派遣人员10名笔试参考题库附带答案详解
- 2025国机集团总部及京内企业管培生招聘笔试参考题库附带答案详解
- 2025四川成都市青白江区区属国有企业招聘43人笔试参考题库附带答案详解
- 地铁施工安全培训心得课件
- 固定资产的取得课件
- 固安县安全生产培训课件
- 地球是人类的家园课件
- 回延安优翼课件
- 医护关系学科研究
- 2025年医师三基考试试题及答案(上半年)
- 基孔肯雅热主题班会课件
- 2025年全国企业员工全面质量管理知识竞赛试题及答案
- 锁骨下盗血综合征伴锁骨下动脉闭塞的护理查房
- 磷化铝管理办法
- 水下激光探测-洞察及研究
- 2025年海底捞企业面试题及答案
- 小学体育家长会课件
- 教育的人口功能
- 抗凝剂皮下注射技术临床实践指南2024版
- 中小学教辅材料征订管理制度
评论
0/150
提交评论