当前位置首页 > 资格/认证考试 > 计算机等级考试
搜柄,搜必应! 快速导航 | 使用教程

全国计算机等级考试2C课程第10讲预编译处理课件

文档格式:PPT| 18 页|大小 134.94KB|2024-11-04 发布|举报 | 版权申诉
第1页
第2页
第3页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 18
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,作者:张旭仟 版权所有 欢迎盗版,*,全国计算机等级考试 2C课程,第十讲 编译预处理命令,11/4/2024,1,作者:张旭仟 版权所有 欢迎盗版,全国计算机等级考试 2C课程第十讲 编译预处理命令9/21/,编译预处理命令的基本概念,ANSI C规定,可以在C源程序中加入一些“编译预处理命令” ,以改进程序设计环境,提高编程效率例如:,#define PI 3.14159,#include ,虽然这些“编译预处理命令”也是由ANSI C统一规定的,但它们并非C语言的组成部分含有这种 “编译预处理命令”的源程序,只有在正式编译之前先对它们进行“预处理”后,才能被正常编译成“目标程序”C语言提供的预处理命令主要有:,宏定义命令,、,文件包含命令,、,条件编译命令,为了与一般C语句相区别,这些编译预处理命令”都以 “#”号开头11/4/2024,2,作者:张旭仟 版权所有 欢迎盗版,编译预处理命令的基本概念ANSI C规定,可以在C源程序中加,不带参数的宏替换命令,不带参数的宏替换命令,一般形式:,#define 标识符 字符串,例如:,#define PI 3.1415926,其中“#define”是宏定义命令, PI 称为“宏名”, “3.1415926”称为宏体。

    作用是将程序中在该命令以后出现的所有的PI都用“3.1415926”代替在预编译时将宏名替换成字符串的过程称为“宏展开”11/4/2024,3,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令不带参数的宏替换命令9/21/20233,不带参数的宏替换命令,说明:,(1)#define命令、宏名、宏体之间必须用空格隔开;,(2)由于宏定义不是C语言程序语句,行的末尾不需要加“;”号;如果加了分号则会作为宏体的一部分被一起置换3)宏名习惯上一般用大写字母表示,以便与普通变量名区别但这并非语法规定,即用小写字母并不属于语法错误;,(4)程序中被加上双引号“”的宏名,将不能被替换,如:printf(“PI”);语句中的PI不会被替换为3.1415926;,(5)适当使用宏名代替一个字符串,可以减少程序中重复书写某些复杂数据的工作量11/4/2024,4,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令说明:9/21/20234作者:张旭仟,不带参数的宏替换命令,例如:,#include ,#define PI 3.1415926,void main(),{ float l,s,r,v;,printf("input radius:");,scanf("%f",,l=2.0*PI*r;,s=PI*r*r;,v=4.0/3*PI*r*r*r;,printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v);,},运行情况如下:,1=25.1328,s=50.2655,v=150.7966,11/4/2024,5,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令例如: #include

    7) #define命令通常写在文件开头或函数之前默认情况下,宏名的有效范围,是从宏定义命令之后开始,直到本源文件结束8)当然,也可以用#undef命令,提前终止宏定义的作用范围如:,#define G 9.8,__,void main(),{ G的有效范围,…,},__,#undef G,f1(),{,…,},11/4/2024,6,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令(6) 宏定义是用宏名代替一个字符串,只,不带参数的宏替换命令,(9) 在进行宏定义时,可以引用已定义的宏名,宏展开时将会层层置换例如:,,#include ,#define R 3.0,#define PI 3.1415926,#define L 2*PI*R,#define S PI*R*R,void main(),{ printf("L=%f\nS=%f\n",L,S);,},编译预处理时:,printf(“L=%f\nS=%f\n”,L,S); 语句将被展开为,printf(“L=%f\nS=%f\n”,2*3.1415926*3.0,3.1415926*3.0*3.0);,11/4/2024,7,作者:张旭仟 版权所有 欢迎盗版,不带参数的宏替换命令(9) 在进行宏定义时,可以引用已定义的,带参数的宏定义,带参数的宏定义,作用:不只进行简单的字符串替换,还进行参数的替换。

    一般形式为:,#define 宏名(参数表)字符串,,例如:,#define,S(a,b) a*b,,,area=S(3,2);,说明:,程序中用3和2分别代替宏定义中的形式参数a和b,用3*2代替,S(3,2),因此赋值语句展开为:,area=3*2,11/4/2024,8,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义带参数的宏定义例如:说明:9/21/20238,带参数的宏定义,对带参的宏定义是这样展开置换的:,对带实参的宏,如S(3,2),基本原则也是按define命令行中指定的字符串从左到右进行置换的但如果字符串中包含有宏名中定义的形参,如: “a*b”中的a和b,则要用程序中相应的实参(可以是常量、变量或表达式)来代替;其他字符,如“a*b”中的*号,则原样保留图中S(3,2)将被置换为3*2,其中3和2是实参,将代替指定字符串a*b中的a和b,*不是参数,则被原样保留11/4/2024,9,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义对带参的宏定义是这样展开置换的:图中S(3,2,带参数的宏定义,例如:,#include ,#define PI 3.1415926,#define S(r) PI*r*r,void main(),{ float a,area;,a=3.6;,area=S(a);,printf("r=%f\narea=%f\n",a,area);,},说明:,赋值语句“area=S(a);” 展开后被替换为:,area=3.1415926,*a*a;,运行结果:,r=3.600000,area=40.715038,11/4/2024,10,作者:张旭仟 版权所有 欢迎盗版,带参数的宏定义例如: #include 说,文件包含命令,所谓“文件包含”,是指一个源文件可以将另外一个源文件的全部内容包括进来。

    C语言提供了#include命令用来实现“文件包含”的操作其一般形式为:,#include "文件名" 或 #include ,说明:,(1)在#include命令中,文件名可以用双撇号或尖括号括起来2)一个#include命令只能指定一个被包含文件,如果要包含n个文件,要用n个#include命令11/4/2024,11,作者:张旭仟 版权所有 欢迎盗版,文件包含命令所谓“文件包含”,是指一个源文件可以将另外一个源,文件包含命令,说明:,(3) 在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的如下图所示,#include ,A,#include ,B,,C,file1.c,file2.c,file3.c,,,C,B,C,11/4/2024,12,作者:张旭仟 版权所有 欢迎盗版,文件包含命令说明:#include A#i,,小练习:,1、以下叙述中错误的是 (2008年4月),A)在程序中凡是以“#”开始的语句行都是预处理命令行,B)预处理命令行的最后不能以分号表示结束,C)#define MAX是合法的宏定义命令行,D)C程序对预处理命令行的处理是在程序执行的过程中进行的,11/4/2024,13,作者:张旭仟 版权所有 欢迎盗版,小练习:1、以下叙述中错误的是 (2008年4月)9/21,,小练习:,2、有以下程序(2010年3月),#include ,#define SUB(a) (a)-(a),main(),{ int a=2,b=3,c=5,d;,d=SUB(a+b)*c;,printf("%d\n",d);,},程序运行后的输出结果是,A)0 B)-12 C)-20 D)10,11/4/2024,14,作者:张旭仟 版权所有 欢迎盗版,小练习:2、有以下程序(2010年3月)9/21/2023,,小练习:,3、有以下程序(2009年9月),#include,#define f(x) x*x*x,main(),{ int a=3,s,t; 3+1*3+1*3+1,s=f(a+1);,t=f((a+1));,printf("%d,%d",s,t);,},程序运行后的输出结果是,A)10,64 B)10,10 C)64,10 D)64,64,11/4/2024,15,作者:张旭仟 版权所有 欢迎盗版,小练习:3、有以下程序(2009年9月)9/21/2023,,小练习:,4、有以下程序,#include ,#define PT 3.5;,#define S(x) PT*x*x;,mian(),{ int a=1, b=2;,printf(“%4.1f\n”,S(a+b)); 3.5*1+2*1+2,},程序运行后输出的结果是,A)14.0 B)31.5,C)7.5 D)程序有错无输出结果,11/4/2024,16,作者:张旭仟 版权所有 欢迎盗版,小练习:4、有以下程序9/21/202316作者:张旭仟,,小练习:,5、有一个名为init.txt的文件,内容如下:,#define HDY(A,B) A/B,#define PRINT(Y) printf(“y=%d\n”,Y),有以下程序,#include "stdio.h",#include "init.txt",main(),{ int a=1,b=2,c=3,d=4,k;,k=HDY(a+c,b+d);,PRINT(k);,},下面针对该程序的叙述正确的是(D),A)编译有错 B)运行出错,C)运行结果为 y=0 D) 运行结果为 y=6,11/4/2024,17,作者:张旭仟 版权所有 欢迎盗版,小练习:5、有一个名为init.txt的文件,内容如下:9,,,Thank listen!,11/4/2024,18,作者:张旭仟 版权所有 欢迎盗版,Thank listen! 9/21/202318作者:张旭,。

    点击阅读更多内容
    卖家[上传人]:风雨无阻
    资质:实名认证
    相关文档
    正为您匹配相似的精品文档