电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

计算机C语言教程第8章预处理

22页
  • 卖家[上传人]:资****亨
  • 文档编号:480705543
  • 上传时间:2024-05-07
  • 文档格式:PPT
  • 文档大小:2.52MB
  • / 22 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、精选ppt第八章第八章 编译预处理编译预处理目的:为了简化程序的编写,提高程序的可移植性、可读性、模块化。C语言设计了假设干命令编译预处理命令,并可出现于程序当中。精选ppt处理流程:第一次编译扫描时,将预编译命令处理完,然后再进行正式编译,生成目标代码。1.宏定义命令;有三种类型的预处理命令:为了与C语句区别,这些命令均以“#开头。2.文件包含命令;3.条件编译命令。精选ppt8.1 宏定义宏定义简化程序的书写,提高可读性、可移植性。一、无参数形式#define 标识符 字符串表达式宏定义分为:无参数和有参数二种形式。#include#define L(x*x+2*x+x)main()int x,y;printf(“input a number:);scanf(%d,&x);y=L*L+2*L+10;printf(y=%d n,y);例如:例如:精选ppt上例中,#define L(x*x+2*x+x),在yL*L+2*L+10;中作了宏调用。在预处理时经宏展开后该语句变为:y(x*x+2*x+x)*(x*x+2*x+x)+2*(x*x+2*x+x)+10;注意几点:(1)宏定义是用

      2、宏名来表示一个字符串,在宏展开时又以该字 符串取代宏名,只是一种简单的代换。(2)宏定义不是说明或语句,在行末不加分号。(3)宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。(4)用引号括起来的宏名,预处理程序不对其作宏代换。(5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。(6)宏名一般用大写字母表示,以便于与变量区别。精选ppt二、有参形式 适宜于字符串表达式序列中有变化的字符,将这局部字符可定义为参数。#define宏名宏名(形参表形参表)字符串字符串 带参宏定义的一般形式为:例如例如:#define L(x)(x*x+2*x+x)/*带参数宏定义*/宏调用:y=L(5);在宏调用时,用实参5去代替形参x,经预处理宏展开后的语句为:y=(5*5+2*5+5);精选ppt例例:#include#define MAX(a,b)(ab)?a:bmain()int x,y,max;scanf(%d%d,&x,&y);max=MAX(x,y);printf(max=%d n,max);说明:说明:上例程序中,表达式(ab)?a:b

      3、由宏名MAX表示,形参a,b均出现在条件表达式中。程序中:max=MAX(x,y);为宏调用,实参x,y将代换形参a,b。宏展开后该语句为:max=(xy)?x:y;精选ppt注意几点:注意几点:(1)宏定义中,宏名和形参表之间不能有空格出现。例如:#define MAX (a,b)(ab)?a:b 将被认为宏名MAX代表的字符串是(a,b)(ab)?a:b,是无参宏定义。(2)在带参宏定义中,形式参数不同于函数中的形参,带参宏定义中的参数不是变量,只是在宏调用时用实参的符号去代换形参,即只是符号代换。所以,不存在值传递的问题。(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。(4)在宏定义中的形参最好用括号括起来,以防止出错。如果去掉上例中(y)*(y)表达式的括号,宏代换后将得到以下语句:y=sin(x)+l*sin(x)+l;精选ppt显然,展开后的表达式与题意相违。为了保证宏代换的正确性,应该给宏定义中的表示表达式的字符串加上括号,如:#define L(x)(x)*(x)+2)宏调用:y=lL(a+5);宏代换后:yl(a+5)*(a+5)+2);如果字符串没有加

      4、上括号,宏代换后会得到完全不同的表达式:y=l(a+5)*(a+5)+2;(5)带参宏与带参函数的区别。精选ppt8.2 文件包含文件包含 C语言允许在一个文件预编译时,将另一个文件原封不动地包含进来。目的:当函数不在一个文件中,既可用link连接编译后的obj文件,也可用“文件包含方式。当一组符号常量的定义为公用时,可作为一个独立的文件被其它文件包含。精选ppt格式:#include 文件名#include f2.c main()例:f1.cf2.c:精选ppt预编译后::main()f1.c为f2.c中的内容再进行正式编译精选ppt1.一个include只能写一个文件,包含多个文件需多个include 只在f1.c中用#include.#include f2.c#include f3.c 分别在f1.c,f2.c中用#include 在f1.c中:#include f2.c 在f2.c中:#include f3.c2.当f1.c包含f2.c,而f2.c又包含f3.c时,有两种包含形式:3.一般用.h 扩展名命名被包含文件。h为head之意以与一般.c 文件区别。如系统stdio.h

      5、.系统.h 文件在子目录INCLUDE下。4.#include后的文件名既可用 ,也可用,两者区别:“首先在当前目录中找,然后再去标准目录中找。只在标准目录(include目录)中找。精选ppt5.被包含文件和包含文件最后形成一个文件。因此,全局变量作用域为整个文件。不必用extern说明。精选ppt8.3 条件编译条件编译 有时,C程序的一局部语句是否起作用要根据一定的条件,即由条件而决定是否起作用。例如:调试程序时,需加多条printf,但调试完那么要一一删除。有的语句也视条件而决定其具体形式。形式1#ifdef 标识符 程序段1#else 程序段2#endif条件编译命令的三种形式:精选ppt功能 当标识符在此之前被定义过(即用#define定义过),那么编译程序段1,否那么编译程序段2。其中:程序段即可为语句组,也可为命令行。例:为了调试程序,加上以下条件编译#ifdef DEBUG printf(x=%d,y=%d,z=%d,x,y,z);#endif另:#else 后面局部可没有,但#endif保存。只要在此之前有:#define DEBUG 那么编译 printf(x=%

      6、d,y=%d,z=%d,x,y,z);精选ppt例例:/*-exp11_5.c-*/includedefine EN printf(Please input number:n)main()int a=123,b=456;#ifdef EN prinft(This is test :a=%dn,a);#else prinft(This is test :b=%dn,b);#endif编译时会有警告:编译时会有警告:b is assigned a value that is never used运行结果运行结果:This is test :a=123精选ppt形式2#ifndef 标识符 程序段1#else 程序段2#endif功能:与形式1的条件正好相反,即:当标识符未被定义,那么编译程序段1,否那么编译程序段2。精选ppt例例:/*-exp11_5.c-*/includedefine EN printf(Please input number:n)main()int a=123,b=456;#ifndef EN prinft(This is test :a=%dn,a);#else prinft(This is test :b=%dn,b);#endif编译时会有警告:编译时会有警告:a is assigned a value that is never used运行结果运行结果:This is test :b=456精选ppt形式3#if 表达式 程序段1#else 程序段2#endif功能:当表达式0,那么编译程序段1,否那么编译程序段2。例例:输入一任意字符串,需将其全部转化为大写字母,或者将其转化为小写字母。只编一个程序,程序中用条件编译,决定是全部转为大写字母还是小写字母。精选ppt i=0;while(c=str i)!=o)#if LETTER if(c=a&c=A&c=Z)c=c+32;#endif printf(str%d=%c,i,c);i+;#define LETTER 1/0 main()char str5;int i=0;for(i=0;i=5;i+)scanf(%s,&stri);精选ppt程序运行后,假设输入:aBcDE那么运行结果为:str0=a str1=b str2=c str3=d str4=e精选ppt

      《计算机C语言教程第8章预处理》由会员资****亨分享,可在线阅读,更多相关《计算机C语言教程第8章预处理》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.