C语言程序设计 第09章 预处理命令_第1页
C语言程序设计 第09章 预处理命令_第2页
C语言程序设计 第09章 预处理命令_第3页
C语言程序设计 第09章 预处理命令_第4页
C语言程序设计 第09章 预处理命令_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、 预处理命令 第9章本 章 内 容宏定义文件包含处理条件编译9.1 宏定义基本概念预处理命令 由ANSI C统一规定,不是C语言本身的组成部分。预处理的实现宏定义文件包含条件编译9.1 宏定义不带参数的宏定义一般形式: #define 标识符 字符串例如: #define PI 3.1415926说明宏名一般用大写字母表示,以便与变量名相区别。宏定义是用宏名代替一个字符串,只作简单的置换,不作正确性检查。宏定义不是C语句,不必在行末加分号。#define命令应放在程序中函数的外面,有效范围为定义命令之后到本源文件结束。可以用#undef命令终止宏定义的作用域。在进行宏定义时,可以引用已定义的宏

2、名,可以层层置换。(例9.2)对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行置换。宏定义与定义变量的含义不同,不分配内存空间。9.1 宏定义带参数的宏定义一般形式 #define 宏名(参数表) 字符串例如: #define S(a, b) a*b area = S(2, 3);宏定义的展开:实参与虚参相对应,从左到右进行置换。例9.3:如果有语句:area = S(a+b);分析程序正误?#define PI 3.1415926#define S(r) PI*r*rmain() float a, area; a = 3.6; area = S(a); printf(%f,

3、%f, a, area); 9.1 宏定义说明带参的宏定义,在定义时,在字符串中的形式参数外面加一个括号。在宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。带参的宏定义与函数的不同函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。函数调用在程序运行时处理,为形参分配临时的内存单元。而宏展开是在编译时进行,不分配内存单元,不进行值的传递处理,也没有返回值的概念。函数中的实参和形参都有相应的类型定义。而宏不存在类型问题,宏名无类型,它的参数也无类型。调用函数只可得到一个返回值,而用宏可以得到几个结果。9.1 宏定义例

4、9.4:宏展开后源程序增长,而函数调用不使源程序变长。宏替换不占运行时间,只占编译时间。而函数调用则占运行时间。对一些简短的功能实现,用宏和函数都可以。例9.5(略)#define PI 3.1415926#define CIRCLE(R, L, S) L=2*PI*R; S=PI*R*Rmain() float r, l; scanf(%f, &r); CIRCLE(r, l); printf(%6.2f, %6.2f, %6.2f, r, l, s); 9.2 文件包含处理文件包含一个源文件可以将另一个源文件的全部内容包含进来,称为文件包含。命令形式 #include 文件名 或 #inc

5、lude (标准方式) file1.c file2.c file1.c编译时两个文件作为一个源程序进行编译,得到一个目标文件。#includeABBA说明:一个#include命令只能指定一个被包含文件。如果文件1包含文件2,而文件2中要用到文件3的内容,则在文件1中有: #include file3.h #include file2.h文件包含可以嵌套。 file1.c file2.c file3.c两种文件包含形式的区别(P196)尖括号 系统到存放C库函数头文件所在的目录中寻找要包含的文件,称为标准方式。双撇号 系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。若文件不

6、在当前目录中,双撇号内可给出文件路径。9.2 文件包含处理#include file2.c#include file3.c9.3 条件编译条件编译指定编译的条件,仅对部分内容进行编译,称为条件编译。条件编译命令的几种形式:(1)#ifdef 标识符程序段1#else程序段2#endif说明:#else 部分可以省略。程序段可以是语句组也可以是命令行。例如:#define DEBUG.#ifdef DEBUG printf(x=%d, x);#else printf(y=%d, y);#endif(3)#if 表达式程序段1#else程序段2#endif(2)#ifndef 标识符程序段1#else程序段2#endif9.3 条件编译9.3 条件编译#define LETTER 1main() char str20 = C Language, c; int i; i = 0; while(c=stri) !=0) i+; #if LETTER if(c

温馨提示

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

评论

0/150

提交评论