第7章 编译预处理命令_第1页
第7章 编译预处理命令_第2页
第7章 编译预处理命令_第3页
第7章 编译预处理命令_第4页
第7章 编译预处理命令_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、 第第 7 章章编译预处理命令编译预处理命令 学习目标学习目标1. 熟练掌握宏定义和宏替换的一般方法;2. 熟练文件包含的处理方法;3. 了解条件编译的作用和实现方法。主要内容主要内容 宏 文件包含处理 条件编译7.1 #define7.1 #define命令命令 一. 编译预处理命令的作用 编译预处理命令通过指令告诉编译系统,在对源程序进行编译之前应该做些什么。所以,编译预处理命令通常位于源程序的开始位置。 编译预处理命令以“#”符号打头,每个命令占用一个单独的书写行,命令尾不使用分号作为结束符。 宏定义预处理命令#define的作用是把一个标识符(宏名)定义为一个字符串。#define预处

2、理命令的格式: #define 标识符 字符串 在编译预处理时,编译系统把源程序中出现的该标识符,均以定义的字符串替换, 将将替换过程称为宏替换。C程序中通常以大写字母定义宏名标识符。 二.宏定义预处理命令#define 例如,有如下的宏定义预处理命令: #define E_MS Standard error On inputn 而程序中有语句: printf(E_MS); 则编译预处理时,凡遇到标识符E_MS时,就用字符串 “Standard error on inputn” 替换。 因此,语句printf(E_MS );经编译预处理后成为: printf(Standard error on

3、 inputn); 这是一个显示“Standard error on input”的C程序语句。注意: #define预处理命令格式中的字符串不需要用“”作为分隔符,例中宏定义预处理命令中的“”是字符串的一部分。 #define预处理命令允许宏名可以带形式参数,称之为带参数的宏。 带参数的宏的格式: #define 标识符(形参表) 字符串 编译预处理时,遇到带参数的宏名时,与之相联的形参由程序中的实参替换,但是,C程序中用双引号括起的字符串中的宏名将不被替换。 【例7-1】宏名替换示例。#define MIN(a,b) (ab)?a:bmain( ) int x,y; x=100; y=20

4、0; printf(the MIN(x,y) is:%dn,MIN(x,y); 被替换成被替换成 printf(the MIN(x,y) is:printf(the MIN(x,y) is:d ,(xy)?x:y)d ,(xy)?x:y); 【例7-2】 设有宏定义 #define S(a,b) a*b试完成下列宏替换:S(3,4), S(x+y,z), S(x+y),z) 。 S(3,4) 3*4 3替换a, 4替换b S(x+y,z) x+y*z x+y替换a,z替换b S(x+y),z) (x+y)*z (x+y) 替换a,z替换b注意: 虽然带参数宏的使用形式与函数相似,但是它们在本质

5、上却是完全不同的,使用带参数的宏只是进行简单的字符替换,没有函数调用中复杂的参数传递过程。 7.2 #include7.2 #include命令命令 文件包含预处理命令文件包含预处理命令#include#include的作用是使一个源文件可以的作用是使一个源文件可以将另外一个源文件的全部内容包含进来。将另外一个源文件的全部内容包含进来。源文件1: 源文件2: 最终的源文件: file1.c file1.c#include file2.c f2()main( ) ; ; ; main( )f1() ; ; f1( ) ; 包含预处理执行#include预处理命令后,把file2.c插入file1

6、.c的#include命令的位置处,使file2.c成为源程序file1.c的一部分。 #include预处理命令的两种格式: 格式1: #include (标准方式) 格式2: #include 包含文件名 其中,包含文件名是指存放在磁盘上的待包含的源文件名。 使用格式1时,C编译系统到存放C语言库函数头文件所在的目录中搜索包含文件。 使用格式2时,将按指定的路径搜索。未指定路径时,则在当前目录中搜索,若找不到,再按标准方式查找。7.3 7.3 条件编译命令条件编译命令条件编译命令的作用是实现对源程序代码有选择地进行编译。 条件编译命令的格式1: #ifdef 符号常量 程序段1#else

7、程序段2 #endif 编译预处理时,如果#ifdef后面的符号常量已经被定义,则编译程序段1,否则编译程序段2。其中, 可以没有程序段2的部分,相当于程序段2为空语句。 【例7-3】 条件编译命令应用示例之一 #define MAX 10 main() #ifdef MAX printf(Happy New Year!n); #else printf(Happy New Spring Festival!n); #endif printf(The endn); 定义一个宏名为定义一个宏名为MAXMAX的符号常量的符号常量该部分语句将不被编译该部分语句将不被编译 #if 表达式 程序段1 #else 程序段2 #endif 编译预处理时,若表达式的值为非0,则编译程序段1 ,否则编译程序段2。与格式1相同,程序段2的部分可以 没有,相当于程序段2为空语句。 把把file2.c插入插入file1.c的的#include命令的位置处,命令的位置处,使使file2.c成为源程序成为源程序file1.c的一部分。的一部分。 条件编译命令的格式2:【例7-4】条件编译命令应用示例之二。 #define LETTER 0 main() char c; printf(Please input a charactern); sc

温馨提示

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

评论

0/150

提交评论