《预处理命令》PPT课件.ppt_第1页
《预处理命令》PPT课件.ppt_第2页
《预处理命令》PPT课件.ppt_第3页
《预处理命令》PPT课件.ppt_第4页
《预处理命令》PPT课件.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

第九章 预处理命令,主要内容,9.1 宏定义 9.2 “文件包含”处理 9.3 条件编译,C程序上机步骤:,编辑,链接,编译,执行,程序代码的录入,生成源程序*.cpp(VC+)或*.c(TC)。,语法分析查错,翻译生成目标程序*.obj 。,运行程序,得到程序结果。,与其它目标程序或库链接,生成可执行程序*.exe 。,导读,C语言提供了一些以#开头的指令,如: #define #include 等。 这些指令是在编译以前就事先进行处理的,因而称为“编译预处理”指令。 可以用编译预处理指令实现以下三种功能: (1) 宏定义 (2) 文件包含 (3) 条件编译,导读,1、不带参的宏定义 用一个指定的标识符(宏名)代表一个字符串。 一般形式: #define 标识符 字符串 如:#define PI 3.1415926 一般宏名用大写字母。 有了这一宏定义后,程序中凡是用到3.1415926的地方都可以以宏名PI出现。,9.1 宏定义,例:定义一个宏名来代表一个参数。 #define PI 3.1415926 void main() float r=2,c,s; c=2*PI*r; s=PI*r*r; 系统在对程序进行编译以前,首先将所有的编译预处理指令进行预处理,对本例来说,就是将程序中所有的宏名PI还原成3.1415926,宏展开。,9.1 宏定义,c=2*3.1415926*r;,s=3.1415926*r*r;,例:定义一个宏名来代表一个数据个数。 #define N #include void main() int aN,i; float s=0; for(i=0;iN;i+) scanf(“%d”, 宏名N等同于符号常量,可以作为数组的长度。,方便修改参数,50,9.1 宏定义,100,例:定义一个宏名来代表一个计算公式。 #define PI 3.1415926 #define AREA PI*r*r #include void main() r=3,s; s=AREA; printf(“n %f”,s); 注意:系统对宏定义的预处理是一个字符串的还原过程。,9.1 宏定义,s=PI*r*r;,s=3.1415926*r*r;,注意以下程序的运行结果: #define F #include void main() int x=3,y=5,z; z=2* F ; printf(“n %d”,z); ,9.1 宏定义,z=z*x+y;,z=z*(x+y);,(x+y),( ),x+y,2、带参的宏定义 宏定义也可以带参数,其一般形式为: #define 宏名(参数表) 字符串 如:#define S(a,b) a*b area=S(3,2); 定义宏名S代表矩形面积,参数a,b为边长。 宏展开过程:,S(3,2),a*b,3*2,9.1 宏定义,在一个源文件中将另一个源文件的内容包含进来。 文件包含指令的一般形式: #include “文件名” 或 #include 用时,系统在存放C库函数头文件的目录中寻找要包含的文件,这称为标准方式。 用“ ”时,系统在用户当前目录中寻找要包含的文件,如果找不到,在按标准方式查找。,9.2 “文件包含”处理,#include “file2.c”,A,file1.c,A,B,B,file1.c,file2.c,9.2 “文件包含”处理,例:如果文件1包含文件2,而文件2中要包含文件3的内容。,file1.c,#include “file2.c”,file2.c,#include “file3.c”,file3.c,C,A,B,file1.c,C,B,A,9.2 “文件包含”处理,例:如果文件1包含文件2,而文件2中要包含文件3的内容。,file1.c,#include “file3.c” #include “file2.c”,file2.c,file3.c,C,A,B,file1.c,C,B,A,9.2 “文件包含”处理,#include “file2.c” #include “file3.c”,C,B,例: #include #include void main() float a,b,c,s,area; scanf(“%f%f%f”, ,9.2 “文件包含”处理,#include “f.h” #include void main() printf(“n%f”,f1(3.0); printf(“n %f”,fac(10); float f1(float r) return(PI*r*r); float fac(int n) int i; float s=1; for(i=1;i=n;i+) s*=i; return(s); ,#define PI 3.1415926 float f1(float r); float fac(int n);,f.c,f.h,9.2 “文件包含”处理,9.3 条件编译,一般情况下,源程序中所有行都参加编译,但是有时希望程序中一部分内容只在满足一定条件时才进行编译,也就是对一部分内容指定编译的条件,这就是条件编译。,9.3 条件编译,条件编译命令有以下几种形式: (1) ifdef 标识符 程序段1 else 程序段2 endif,或 ifdef 标识符 程序段1 endif,作用:若指定的标识符已经被#define 命令定义过,则在程序编译阶段编译程序段1;否则编译程序段2。其中#else部分可以没有。,9.3 条件编译,#ifdef COMPUTER_A #define INTEGER_SIZE 16 #else #define INTEGER_SIZE 32 #endif,例:条件编译可以提高C源程序的通用性,如果在这组条件编译命令之前曾出现以下命令: define COMPUTER_A 0 或 define COMPUTER_A 只要COMPUTER_A定义过。,9.3 条件编译,例:在调试程序时,希望输出一些信息,而调试完后不在输出这些信息。,#ifdef DEBUG printf(“x=%d,y=%d”,x,y); #endif,如果在这组条件编译命令之前出现以下命令: define DEBUG,9.3 条件编译,(2) ifndef 标识符 程序段1 else 程序段2 endif,作用:若指定的标识符未被#define 命令定义过,则在程序编译阶段编译程序段1;否则编译程序段2。其中#else部分可以没有。,9.3 条件编译,(3) if 表达式 程序段1 else 程序段2 endif,作用:若指定的表达式为真(非0)时,则在程序编译阶段编译程序段1;否则编译程序段2。,9.3 条件编译,例:输入一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写字母输出。,include #define LETTER void main() char str20=“C Language”,c; int i=0; while(c=stri)!=0) i+; #if LETTER if(c=a ,0,1,练习,1、请分析以下一组宏定义的输出格式: #define NL putchar(n) #define PR(format,value) printf(“value=%formatet”,(value) #define PRINT1(f,x1) PR(f,x1); NL #define print2(f,x1,x2) PR(f,x1);

温馨提示

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

评论

0/150

提交评论