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

下载本文档

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

文档简介

1、第第8章章 编译预处理编译预处理本章要点:本章要点: 无参宏定义无参宏定义 有参宏定义有参宏定义 文件包含文件包含学习方法建议:学习方法建议:学习本章内容时,应重点掌握无参宏定义与带参宏定学习本章内容时,应重点掌握无参宏定义与带参宏定义的使用,掌握文件包含的意义,了解条件编译的作用。义的使用,掌握文件包含的意义,了解条件编译的作用。1问题描述问题描述求最大值、最大值的平方、数值和的平方。求最大值、最大值的平方、数值和的平方。输入输入3个实数,个实数,求其中最大的实数。求其中最大的实数。求最大实数的平方。求最大实数的平方。求求3个实数和的平方。个实数和的平方。2引例分析引例分析任意输入任意输入3

2、个实数,首先需要求出三个数中最大的实数,当最个实数,首先需要求出三个数中最大的实数,当最大值求出后,就可以求出最大实数的平方,然后再求出大值求出后,就可以求出最大实数的平方,然后再求出3个实个实数和的平方,编写程序实现这些功能,可以通过函数实现,数和的平方,编写程序实现这些功能,可以通过函数实现,也可以使用预处理等多种方法实现。也可以使用预处理等多种方法实现。8.1 引例引例 3程序代码程序代码#includestdio.h#define MAX(a,b) (a)=(b)?(a):(b) /*定义有参宏,求两个数中的最大数定义有参宏,求两个数中的最大数*/#define SQR(a) (a)*

3、(a) /*定义有参宏,求一个数的平方定义有参宏,求一个数的平方*/main() int i; float x3,max,sq_max,sq_sum; printf(nPlease input three real numbers:); for(i=0;i (b) ? (a) : (b) main( ) int x,y,z; scanf(%d%d,&x,&y); z=MAX(x,y); printf(Max=%d,z); 8.3.1 文件包含处理命令的格式文件包含处理命令的格式文件包含一般形式为:文件包含一般形式为: #include 或或 #include 文件名文件名其功能

4、是用相应文件中的全部内容来替换该预处理语句。其功能是用相应文件中的全部内容来替换该预处理语句。8.3.2 文件包含的优点文件包含的优点一个大程序,通常分为多个模块,并由多个程序员分别编程。一个大程序,通常分为多个模块,并由多个程序员分别编程。有了文件包含处理功能,就可以将多个模块共用的数据(如符有了文件包含处理功能,就可以将多个模块共用的数据(如符号常量和数据结构)或函数,集中到一个单独的文件中。这样,号常量和数据结构)或函数,集中到一个单独的文件中。这样,凡是要使用其中数据或调用其中函数的程序员,只要使用文件凡是要使用其中数据或调用其中函数的程序员,只要使用文件包含处理功能,将所需文件包含进

5、来即可,不必再重复定义它包含处理功能,将所需文件包含进来即可,不必再重复定义它们,从而减少重复劳动。们,从而减少重复劳动。8.3 文件包含文件包含8.4.1 #ifdef命令命令一般形式为:一般形式为: #ifdef 标识符标识符 程序段程序段1 #else 程序段程序段2 #endif其作用是:如果标识符已经定义过(一般是指用其作用是:如果标识符已经定义过(一般是指用#define命令定义),那么,命令定义),那么,程序段程序段1参加编译,否则,程序段参加编译,否则,程序段2参加编译。程序段参加编译。程序段1和程序段和程序段2可以包含任意可以包含任意条语句。程序段条语句。程序段1或程序段或程

6、序段2即使由多条语句组成,也不需要用花括号括起来。即使由多条语句组成,也不需要用花括号括起来。其中其中#else部分可以省略,即:部分可以省略,即: #ifdef标识符标识符 程序段程序段 #endif作用是:如果标识符已定义过,则程序段参加编译,否则,程序段不参加编译。作用是:如果标识符已定义过,则程序段参加编译,否则,程序段不参加编译。 8.4 条件编译条件编译8.4.2 #ifndef命令命令#ifndef命令的用法与命令的用法与#ifdef命令的用法类似,其一般形式为:命令的用法类似,其一般形式为: #ifndef标识符标识符 程序段程序段1 #else 程序段程序段2 #endif其

7、作用是:当标识符没有定义时,编译程序段其作用是:当标识符没有定义时,编译程序段1,否则,编译程序,否则,编译程序段段2。其中。其中#else部分可以省略,即:部分可以省略,即: #ifndef 标识符标识符 程序段程序段 #endif作用是:当标识符没有定义时,程序段参加编译,否则,程序段不作用是:当标识符没有定义时,程序段参加编译,否则,程序段不参加编译。参加编译。8.4.3 #if 命令命令 #if预处理命令提供了按条件控制编译过程的方法。其一般形式为:预处理命令提供了按条件控制编译过程的方法。其一般形式为: #if 表达式表达式 程序段程序段1 #else 程序段程序段2 #endif它

8、的作用是:当表达式为它的作用是:当表达式为“真真”(值非(值非0)时,程序段)时,程序段1参加编译,否则,程参加编译,否则,程序段序段2参加编译。其中的参加编译。其中的#else部分可以省略。部分可以省略。8.4.4 #undef 命令命令#undef命令的一般形式如下所示:命令的一般形式如下所示: #undef标识符标识符它的作用是:将已经定义的标识符变为未定义的。它的作用是:将已经定义的标识符变为未定义的。 【例【例8.3】 交换两个变量的值。交换两个变量的值。#includestdio.h#define SWAP(x,y) int t;t=x;x=y; y=t;main() int a,

9、b,temp; printf(input a&b:); scanf(%d%d,&a,&b); printf(nBefore: a=%dtb=%d,a,b); #ifdef SWPA /*如果如果SWPA被定义被定义*/ SWAP(a,b); /*调用宏调用宏*/ #else temp=a;a=b;b=temp; #endif printf(nafter: a=%dtb=%d,a,b); 【例【例8.4】 输入三个整数,并利用宏定义求出其中的最小值。输入三个整数,并利用宏定义求出其中的最小值。 #include stdio.h #define MIN(x,y) (x) (

10、y) ? (x) : (y) main( ) int a,b,c,M; printf(Input a,b,c:); scanf(%d%d%d,&a,&b,&c); M=MIN(MIN(a,b),c); printf(Min=%d,M); 【例【例8.5】 从键盘输入从键盘输入10个整型数据,将其中的最大值或最小值显示出来。个整型数据,将其中的最大值或最小值显示出来。 #include stdio.h #define MFLAG 1 main( ) int i,M; int array10; for(i=0;i10;i+) scanf(%d,&arrayi); M

11、=array0; for(i=1;i10;i+) #if MFLAG if(Marrayi) M=arrayi; #endif if(MFLAG) printf(Max=%d,M); else printf(Min=%d,M); 上机实验上机实验1掌握宏定义与宏展开的应用;掌握宏定义与宏展开的应用; 2掌握文件包含的方法与应用。掌握文件包含的方法与应用。一、实验目的一、实验目的1验证性实验验证性实验1)分析下面程序的输出结果,然后上机验证。)分析下面程序的输出结果,然后上机验证。#define EXCH( a, b ) int t; t=a ;a=b ; b=t ; #include stdi

12、o.hmain ( ) int x=5, y=9 ; EXCH (x , y); printf (x=%d ,y=%dn, x , y ); 二、实验内容二、实验内容2)下面程序用于计算两个实数的平方及该两个实数和的平方)下面程序用于计算两个实数的平方及该两个实数和的平方,请修,请修改程序中的错误。使之得到正确的结果。例如:输入的两个数分别是改程序中的错误。使之得到正确的结果。例如:输入的两个数分别是2和和3输出应该是:输出应该是:a=2.00 SQR(2.00)=4b=3.00 SQR(3.00)=9a+b=5.00 SQR(5.00)=25.00#include stdio.h#define SQR(a) a*a /*此处有错误,请改正此处有错误,请改正*/main() float a,b; printf(input a&b:); scanf(%f%f,&a,&b); printf(na=%.2ftSQR(%.2f)=%.2f,a,a,SQR(a); printf(nb=%.2ftSQR(%.2f)=%.2f,b,b,SQR(b); printf(na+b=%.2ftSQR(%.2f)=%.2f,a+b,a+b,SQR(a+b); 2设计性实验设计性实验1)三角形的面积为)三角形的面积

温馨提示

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

评论

0/150

提交评论