- 0
- 0
- 约2.54千字
- 约 20页
- 2021-12-03 发布于广东
- 举报
可编辑 烟台大学 计算机学院 刘 培 华 * 第6章 编译预处理 2005年3月 * 主要内容 编译预处理 多文件程序的调试方法 条件编译 2005年3月 * 源文件 *.c 运行文件 *.exe 编译 编译 编译 目标文件 *.obj 连接 编译 连接 连接 编译预处理 编 译 编译预处理包括: 宏定义 文件包含 条件编译 6.1 编译预处理 2005年3月 * 6.1 编译预处理〔续〕 源文件 *.c 运行文件 *.exe 目标文件 *.obj 编译 连接 main() { float r,s,c; scanf(“%f〞,r); s = r * r * 3.14; c = 2 * r * 3.14; printf(“s=%f, c=%f〞,s,c); } 如何修 改圆周率 2005年3月 * #define 宏名 字符串 宏定义的功能: 在进行编译前,用字符串原样替换程序中的宏名。 这个替换过程称为“宏替换〞或“宏展开〞,字符串也称为替换文本。 命令的一般格式: 6.1.1 不带参数的宏定义 6.1 编译预处理〔续〕 2005年3月 * 6.1 编译预处理〔续〕 例如: main() { float r,s,c; scanf(“%f〞,r); s = r * r * PI; c = 2 * r * PI; printf(“s=%f, c=%f〞,s,c); } 替 换 编 译 2005年3月 * 6.1 编译预处理〔续〕 ②为了增加程序的可读性,建议宏名用大写字母,其他的标识符用小写字母。 ③双引号中有与宏名相同的字符串不进行替换。 ④已经定义的宏名可以被后定义的宏名引用。在预处理时将层层进行替换。 说明: ① 宏定义的作用域是从定义处开始到源文件结束, 但根据需要可用undef命令终止其作用域。形式为: #undef 宏名 2005年3月 * 【例6.1】不带参数的宏定义。 源程序: #define S PI*r*r #define V 4*S*r/3 main( ) {float r; printf(\nInput r:); scanf(%f,r); printf(S=%.2f V=%.2f\n,S,V); } 编译预处理后的程序: main( ) { float r; printf(\nInput r:); scanf(%f,r); printf(S=%.2f V=%.2f\n, 3.14*r*r, 4* 3.14*r*r *r/3); } S V S V 进入编译 2005年3月 * 命令的一般形式 6.1.2 带参数的宏定义 #define 宏名(形参表) 字符串 功能: 在编译预处理时,把源程序中所有带参数的宏名用宏定义中的字符串替换,并且用宏名后圆括号中的实参替换字符串中的形参。 例如:#define MAX(X,Y) ((X)(Y)?(X):(Y)) 6.1 编译预处理〔续〕 2005年3月 * 6.1 编译预处理〔续〕 【例6.30】带参数的宏定义。 #define MAX(x,y) ((x)(y)?(x):(y)) main( ) { … printf(%d\n,a,b, MAX(a,b)); printf(%d\n,MAX(a+m,b+n)); } 分两次替换: ①将宏名MAX(a,b) 替换成字符串 ((x)(y)?(x):(y))。 ②用实参a替换形参x,实参b替换形参y。 程序中的两个printf语句被展开为: printf(%d\n, ((a)(b)?(a):(b))); printf(%d\n, ((a+m)(b+n)?( a+m):( b+n))); 2005年3月 * 6.1 编译预处理〔续〕 【例6.3】分析下面程序运行后的输出结果。 #define MA(x) x*(x-1) main( ) { int a=1,b=2; printf(%d\n, MA(1+a+b)); } 分两次替换: ①MA(1+a+b) 用x*(x-1) 替换。 ②用1+a+b替换x。 printf语句被展开为: printf(%d\n, 1+a+b*(1+a+b-1)); 特别注意: 由于替换文本中的x没有用括号括起,因此,1+a+b也不能用括号括起。 程序输出结果:8 2005年3月 * 6.1 编译预处理〔续〕 1.命令的一般形式 格式1: #include 文件名 格式2: #include 文件名 6.1.3 文件包含 文
您可能关注的文档
- 2019年中国在线教育行业市场分析报告.ppt
- BodyTite黄金微针最新治疗技术--祛腋臭.ppt
- CAP的诊断和治疗.ppt
- CDISC编码标准和21CFR Part11在医学研究系统中的应用.ppt
- CT 一般性故障的诊断GE.ppt
- DIC的诊断与评价.ppt
- EXCEL表格公式培训.ppt
- CUA前列腺癌指南内分泌治疗解读.ppt
- DRGS病历首页数据与主要诊断.ppt
- 云南省曲靖市宣威市第一中学2026届高三上学期期末考试语文试卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit7 Being a Smart Shopper素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit10 Lending a Helping Hand素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit11 Rules Matter素养测评卷(含答案).docx
- 2025-2026学年科普版七年级下册英语Unit12 Better Together素养测评卷(含答案).docx
- 2026年中考英语语法选择专题训练(含答案).docx
- 2026中考语文二轮学思并重,涵养君子之德论语十二章、虽有佳肴、大道之行也.docx
- 中考文言文常见文化常识梳理.docx
- 中考语文二轮:内修君子德外尽忠臣心诚子书出师表修身立德主题学习.docx
- 中考语文二轮:不一样的求学路一样的成长梦送东阳马生序劝学主题学习.docx
- 中考语文二轮:《陋室铭》《爱莲说》托物寓意主题学习.docx
原创力文档

文档评论(0)