- 1
- 0
- 约2.76千字
- 约 11页
- 2019-01-04 发布于浙江
- 举报
樊媛媛《c语程序设计》09-编译预处理
第九章 编译预处理 C语言提供了一些以#开头的指令,如: #define #include 等。 这些指令是在编译以前就事先进行处理的,因而称为“编译预处理”指令。 可以用编译预处理指令实现以下三种功能: 1) 宏定义 2) 文件包含 3) 条件编译 9.1 宏定义 1、不带参的宏定义 用一个指定的标识符(宏名)代表一个字符串。 一般形式: #define 标识符 字符串 如:#define PI 3.1415926 有了这一宏定义后,程序中凡是用到3.1425926的地方都可以以宏名PI出现。 例:定义一个宏名来代表一个参数。eg9-01.c #define PI 3.1415926 main() { float r=1.0,c,s; c=2*PI*r; s=PI*r*r; ┈} 系统在对程序进行编译以前,首先将所有的编译预处理指令进行预处理,对本例来说,就是将程序中所有的宏名PI还原成3.1415926, ——宏展开。 例:定义一个宏名来代表一个数据个数。eg9-02.c #define N 100 main() { int a[N],i; float s=0; for(i=0;iN;i++)scanf(“%d”,a[i]); for(i=0;iN;i++)s+=a[i]; s/=N; printf(“\n %f”,s); } 宏名N---符号常量,可以作为数组说明的长度。 方便修改参数。 例:定义一个宏名来代表一个计算公式。eg9-03.c #define PI 3.1415926 #define AREA PI*r*r main() { float r=3,s; s=AREA; printf(“\n %f”,s); } 注意:系统对宏定义的预处理是一个字符串的还原过程,不要把宏名看成一个整体。 注意以下程序的运行结果: eg9-04.c #define F1 x+y #define F2 (x+y) main() { int x=3,y=5,z1,z2; z1=2*F1; z2=2*F2; printf(“\n %d”,z); } 2、带参的宏定义 宏定义也可以带参数,其一般形式为: #define 宏名(参数表) 字符串 如: eg9-05.c #define S(a,b) a*b area=S(3,2); 定义宏名S代表矩形面积,参数a,b为边长。 宏展开过程: 9.2 文件包含处理 在一个源文件中将另一个源文件的内容包含进来。 文件包含指令的一般形式: #include “文件名” 或 #include 文件名 #include “file2.c” 例: #include “math.h” main() { float a,b,c,s,area; scanf(“%f%f%f”,a,,c); s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“\n %f”,area); } #include “f.h” 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); } * A file1.c A B B file1.c file2.c #define PI 3.1415926 float f1(float r); float fac(int n); f.c f.h * * * 2*3+5=11 2*(3+5)=16 函数式宏定义与普通函数 在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述: 函数式宏定义:#define MAX(a,b) ((a)(b)?(a):(b)) 普通函数?????:?MAX(a,b) { return
您可能关注的文档
- 机械原理(学政)ch05.ppt
- 机械原理崔学政)ch08.ppt
- 机械原理(崔学政ch09.ppt
- 机械工程测试技术基础(三版)段富海-第四章 信号调理与记录.ppt
- 机械工程测试技术基础(军)第四章.ppt
- 机械原理课程设计-01312.ppt
- 机械工程测试技术基础(第三版段富海-第五章.ppt
- 机械工程测试技术基础(第三版段富海-第五章 信号处理初步.ppt
- 机械原理崔学政)ch03.ppt
- 机械原理(学政)ch01.ppt
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
最近下载
- 25HNTJ026 锯齿形装配式混凝土剪力墙结构施工图制图规则及构造详图 T_HNKCSJ 025-2025.docx VIP
- 25HNTJ025 刚节点装配式混凝土框架结构施工图制图规则及构造详图 T_HNKCSJ 024-2025.docx VIP
- DGJ 08-83-2000 防静电工程技术规程-全国各省建筑标准.pdf VIP
- DB11∕T 1322.19-2017 安全生产等级评定技术规范 第19部分:环卫从业单位.pdf VIP
- DB11∕T 1313-2015 薄抹灰外墙外保温用聚合物水泥砂浆 应用技术规程.pdf VIP
- SONY摄像机说明书.pdf VIP
- 山东服装职业学院单招职业倾向性测试题库附答案详解.docx VIP
- 老挝的历史发展与现状及其与中国的关系[整理版].doc VIP
- 民航安检、航班机组报警和公安警情处置规范..pdf VIP
- 西电电路考研题库及答案.doc VIP
原创力文档

文档评论(0)