C语言_第13章_第1页
C语言_第13章_第2页
C语言_第13章_第3页
C语言_第13章_第4页
C语言_第13章_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第十三章编译与预处理 第十三章编译与预处理 13 1宏定义13 2 include指令13 3条件编译13 4实战练习 本章学习内容 13 1宏定义 在c语言的源程序中允许用一个标识符来表示一个字符串 称为 宏 被定义为 宏 的标识符称为 宏名 在预处理阶段 对程序中所有出现的 宏名 都用宏定义中的字符串替换 称为 宏替换 或 宏展开 宏定义是预处理命令的一种 分为不带参数的宏定义和带参数的宏定义 13 1 1不带参数的宏定义 定义的一般形式 define宏名字符串其中 表示这是一条预处理命令 define表示宏定义命令宏名必须是一个标识符字符串可以是常数 表达式 格式字符串等 13 1 1不带参数的宏定义 例如 definepi3 1415使用宏定义的好处是在需要改变一个常量值时 只需要改变 define这一行 整个程序中使用该宏名的地方都会被同步修改 提高程序的灵活性 说明1 宏名要简单且意义明确 一般习惯使用大写字母表示2 宏定义用宏名表示一个字符串 在宏展开时用该字符串替换宏名3 宏定义不属于语句 不能在行末使用分号 13 1 1不带参数的宏定义 说明4 宏定义可以嵌套定义5 宏定义必须在函数外 使用 undef终止作用域6 程序中若宏名出现在引号中 预处理程序不会进行替换 definetest100printf thisistest 13 1 2带参数的宏定义 定义的一般形式 define宏名 形参表 字符串宏调用的一般形式 宏名 实参表 例如 definefun y y y 3 y k fun 5 替换后如下 k 5 5 3 5 13 1 2带参数的宏定义 说明1 宏名与形参表之间不能有空格出现 definemax a b a b a b若写成 definemax a b a b a b将被认为是无参数的宏定义 宏名max代表字符串 a b a b a b 所以宏展开时如下 宏调用语句 max max x y 将会变成 max a b a b a b x y 13 1宏定义 2 在宏定义中形参是标识符 而宏调用中实参可以是表达式 这时字符串中的形参要加上括号 若形参不加括号 那么宏定义中的结果有可能是错误的 definefun a b 2 a b宏调用如下 k fun 1 2 3 4 那么宏替换的结果如下 k 2 1 2 3 4 结果为11 本例宏定义的本意是 k 2 1 2 3 4 结果为13 13 1 2带参数的宏定义 3 在带参数的宏定义中 形式参数不分配内存单元 因此不必作类型定义 而宏调用中的实参有具体的值 要用它们去替换形参 因此必须作类型说明 与函数中的情况不同 在函数中 形参和实参是两个不同的量 各自有着自己的作用域 调用时要把实参值赋给形参 进行 值传递 而在带参数的宏定义中 只是符号替换 不存在值传递的问题 13 2 include指令 include指令是文件包含命令在一个源文件中使用 define指令可以将另一个源文件中的内容全部包含进来 include指令的一般形式 include 文件名 或 include 13 2 include指令 include指令是文件包含命令说明1 使用尖括号表示系统首先到存放c库函数头文件所在的目录中去查找所包含的文件 使用双引号时 系统先在用户当前目录中查找所包含的文件 若未找到 再去存放c库函数头文件所在目录查找 通常如果包含系统文件 使用尖括号 包含自定义文件 使用双引号2 一条 include指令只可以包含一个文件 需要包含多个文件时 需要使用多条 include指令3 文件包含允许嵌套 13 3 1 if命令 条件编译是在满足一条条件时 才对一部分代码参与编译 if常量表达式语句段1 else语句段2 endif含义 如果 if命令后的常量表达式为真 使用语句段1参与编译 否则使用语句段2参与编译 13 3 2 ifdef及 ifndef命令 ifdef命令表示 如果有定义 ifdef宏名语句段1 else语句段2 endif含义 如果宏名被定义过 使用语句段1参与编译 否则使用语句段2参与编译 13 3 2 ifdef及 ifndef命令 ifndef命令表示 如果未定义 ifndef宏名语句段1 else语句段2 endif含义 如果宏名未被定义过 使用语句段1参与编译 否则使用语句段2参与编译 13 3 3 undef命令 undef命令可以使一个宏定义失效 用来控制宏名的作用域一般形式 undef宏名例如 definesize100 undefsize 13 3 4 line命令 c语言提供定义好的宏 line 存放当前编译行的行号 file 存放当前编译的文件名 line命令就是用来修改 line 和 file 的内容 一般形式 line行号 文件名 其中行号为任一正整数 可选的文件名为任意有效文件标识符 行号为源程序中当前行号 文件名为源文件的名字 13 3 5 pragma命令 1 pragma命令 pragma命令的作用是设置编译器的状态 或者指示编译器完成一些特定的动作 pragma参数其中 参数可以有以下几种 1 message参数能够在编译信息输出窗口中输出相应的信息 2 code seg参数设置程序中函数代码存放的代码段 3 once参数保证头文件只被编译一次 13 3 5 pragma命令 2 预定义宏名ansi标准说明了以下5个预定义宏替换名 line 其含义是当前被编译代码的行号 file 其含义是当前源程序的文件名称 date 其含义是当前源程序的创建日期 time 其含义是当前源程序的创

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论