好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言程序ch8编译预处理.ppt

21页
  • 卖家[上传人]:cl****1
  • 文档编号:590891955
  • 上传时间:2024-09-16
  • 文档格式:PPT
  • 文档大小:187.50KB
  • / 21 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第八章 本章主要内容本章主要内容3.了解条件了解条件编译编译命令命令 C的源程序的源程序 预处理理 编译 目目标程序程序 ((*.C) _______________ (*.OBJ)编译系系统中有中有 : 预处理程序理程序 编译程序程序Ø宏替换 #define N 20 Ø文件包含 #include<>Ø条件编译 if( ... ) • C中的中的预处理命令理命令分分类类 宏定宏定义义有两种有两种类类型型:字符串替字符串替换换和和带带参数的宏替参数的宏替换换   1 字符串宏替字符串宏替换换§ 功能:功能:在在预处预处理理时时 ,将程序中宏定将程序中宏定义义之后出之后出现现的的所有的宏名所有的宏名,用宏替用宏替换换体代替宏替宏替换名名宏替宏替换体体§ 格式:格式:#define   标识符 字符串符 字符串 C的的编译程序程序调用用预处理程序理程序检查有否有否宏名宏名,若有,,若有,用用宏替宏替换体体将其替将其替换,完成之后,将替,完成之后,将替换后的源程序后的源程序交交该编译程序8.1 8.1 宏定宏定义义 § 用途用途: 常用的符号常数常用的符号常数 数数组组的的长长度度 #define N 10 /* 编译编译之前用之前用10替替换换所有的所有的N */…….int a[N]§ 说说明明:v 通常放在程序开通常放在程序开头头, ,不加分号不加分号v 是代替是代替, ,不是不是赋值赋值( (不作不作语语法法检查检查) )v 可将多个可将多个语语句或表达式定句或表达式定义为义为一个宏替一个宏替换换v 区区别变别变量和关量和关键键字字, ,习惯习惯用大写用大写 #define L 2.0*PI*R#define S PI*R*Rv 双引号中的不替双引号中的不替换换v 有效范有效范围围, ,从定从定义义开始到程序开始到程序结结尾尾main( ) { printf (“PI=%f\n”,PI); }结结果:果:main( ) { printf(“PI=%s\n”,”PI”); }v 可以嵌套可以嵌套, ,后定后定义义的宏可以包含先定的宏可以包含先定义义的宏名的宏名结结果果::PI=PI 2 带带参数的宏定参数的宏定义义 带带参数的宏不参数的宏不仅仅能能进进行字符串代替,而且行字符串代替,而且还进还进行参数代行参数代换换。

      § 格式:格式: #define 宏名(参数表)宏名(参数表) 表达式表达式§ 功能功能:: 带参数的宏将一个参数的宏将一个带形参形参的表达式定的表达式定义为一个一个带参数参数的宏名,的宏名,预处理程序理程序对程序中所有程序中所有带实参参表的宏名表的宏名进行行宏宏展开展开替替换,,用表达式代替宏名,用参数表中的用表达式代替宏名,用参数表中的实参代替表参代替表达式中达式中对应的形参的形参例:例:#define S( a, b) a*b程序中程序中 S(3, 2) 3*2 § 用途:用途:用用带参数的宏可以代表一些参数的宏可以代表一些简短的表达式,提高短的表达式,提高程序程序执行的效率行的效率 * 宏定宏定义可以嵌套可以嵌套* * 对对常用的格式常用的格式输输入入输输出函数出函数printfprintf可以可以进进行宏定行宏定义义,使程序,使程序简简化化* *宏名与参数的宏名与参数的圆圆括号之括号之间间不能有空格不能有空格 s (a,b) s (a,b)§ 说明:明:* 宏定宏定义义命令要求在一行内写完,如命令要求在一行内写完,如换换行,用行,用“\”表表示下一行示下一行继续继续。

      * 对对于宏定于宏定义义的形参要根据需要加上的形参要根据需要加上圆圆括号,以免括号,以免 发发生运算生运算错误错误 [例例1] 使用有参宏替使用有参宏替换换求园的面求园的面积积 #define S(r) PI*r*r main() {float a=3.6,area; area=S(a); printf(“r=%f\narea=%f\n”,a,area); } [例例2] 求下列求下列语语句的循句的循环环次数 #include “stdio.h” #define N 2 #define M N+1 #define NUM (M+1)*M/2 main() { int i,n=0; for(i=1;i<=NUM;i++) {n++; printf(“%d”,n); } }8 函数要求形参,函数要求形参,实实参有参有类类型(相同)型(相同) 宏的形参,宏的形参,实实参不要求参不要求类类型,型,仅仅是符号是符号函数需事先函数需事先计计算算实实参表达式的参表达式的值值,再代入形参,再代入形参宏展开中不求表达式的宏展开中不求表达式的值值,,仅仅替替换换, 没有没有值传递值传递函数是在运行函数是在运行时处时处理理宏是在宏是在编译编译之前之前进进行行§带带参数的宏与函数的区参数的宏与函数的区别别函数函数调调用影响运行用影响运行时间时间,源程序无,源程序无变变化化宏展开影响宏展开影响编译时间编译时间,通常使源程序加,通常使源程序加长长函数函数调调用有一个返回用有一个返回值值 宏可以有多个宏可以有多个结结果果 例例:求最大求最大值值。

      答案中用答案中用U代表空格代表空格)#include #define MAX(x,y) ___A___main(){ float a,b,c,d; scanf("%f%f", ___B___ ); c=MAX(a,b); d=MAX(3+a,4*b); printf("c=%f,d=%f.\n",c,d);}A: x>y?x:yB: &a,&b 文件包含是指一个程序文件将另一个指定文件的文件包含是指一个程序文件将另一个指定文件的全部内容包含全部内容包含进进来§ 格式格式: #include <文件名文件名> 或或: #include “文件名文件名”8.2 8.2 文件包含文件包含§ 功能功能: 用指定文件的全部内容代用指定文件的全部内容代换该预处理行理行 ,C程序通程序通过#include预处理理,把一个指定的文件的把一个指定的文件的内容嵌入内容嵌入只能包含只能包含ASCII文本文件文本文件Ø < >< >与与“ ”“ ”的区的区别别: : < > < >在在TCTC标标准目准目录录下找指定文件下找指定文件 “ ” “ ” 在用在用户户当前目当前目录录下找指定文件下找指定文件, ,如用如用户户当前目当前目录录下没有下没有, ,再到再到TCTC标标准目准目录录下找。

      下找§ 说说明明 Ø 只包含源文件只包含源文件, ,不包含可不包含可执执行文件和目行文件和目标标文件Ø 可以嵌套可以嵌套例如例如: :需包含需包含file2.c,file2.c,包含包含,在,在file1file1中中, ,用两次用两次#include #include #include,#include,必必须须将将放在前面放在前面Ø 一个一个#include#include只能包含一个文件只能包含一个文件 §用途用途Ø 将符号常量将符号常量 , 带带参数的宏及构造参数的宏及构造类类型的型的变变量等量等定定义义在一个独立的文件中在一个独立的文件中,为为其他文件共享其他文件共享Ø 程序程序员员可将工作中可将工作中积积累的有价累的有价值值的符号的符号,带带参数参数的宏定的宏定义义,或一些外部或一些外部变变量量,通用的子程序定通用的子程序定义义成一成一个文件个文件,需要需要时时,包含包含进进源程序Ø 使用使用C中的中的库函数函数,需将所在的需将所在的头文件包含文件包含进源源程序。

      程序 ““文件包含文件包含””示意示意图图 包含包含#include”file2.c” B A B A (a) (b) (c) 常用的有三种形式:常用的有三种形式: 形式一:形式一: #ifdef 宏名宏名 程序段程序段1;; #else 程序段程序段2;; #endif 或者:或者:#ifdef 宏名宏名 程序段;程序段;#endif 形式二:形式二: #ifndef 宏名宏名 程序段程序段1;; #else 程序段程序段2;; #endif其中,其中,# ifndef语语句的功能与句的功能与# ifdef相反,如果宏名相反,如果宏名未定未定义则编译义则编译程序段程序段1,否,否则编译则编译程序程序2。

      或者:或者:#ifndef 宏名宏名 程序段;程序段;#endif 形式三:形式三: #if 常数表达式常数表达式 程序段程序段1;; #else 程序段程序段2;; #endif 功功能能::首首先先计计算算“常常数数表表达达式式”的的值值,,如如果果为为真真((非非零零)),,就就编编译译“程程序序段段1”,,否否则则编编译译“程程序序段段2”如如果果没没有有#else部部分分,,则则当当“常常数数表表达达式式”的的值值为为0时时,,直接跳直接跳过过#endif或者:或者:#if 常数表达式常数表达式 程序段;程序段;#endif 例:例:阅读阅读程序include main(){ #if NULL printf("NULL is non-zero value!\n"); #else printf("NULL is zero value!\n"); #endif}运行运行结结果:果:NULL is zero value! 条件条件编译编译可以嵌套使用,如:可以嵌套使用,如:#if表达式表达式1程序段程序段1;;#else#if 表达式表达式2 程序段程序段2;;#else 程序段程序段3;;#endif#endif 。

      点击阅读更多内容
      相关文档
      2025国开山东开大《土质学与土力学》形成性考核123答案+终结性考核答案.docx 中学综合素质知识点梳理【中学教师资格证】.docx 2025国开山东开大《特许经营概论》形成性考核123答案+终结性考核答案.doc 2025年高考英语全国一卷真题(含答案).docx 2025国开山东《农民专业合作社创建与管理》形成性考核123答案+终结性考核答案.docx 2025国开山东开大《自然现象探秘》形成性考核123答案+终结性考核答案.docx 2025国开山东《消费心理学》形成性考核123答案+终结性考核答案.doc 2025国开山东《小微企业管理》形成性考核123答案+终结性考核答案.doc 2025国开山东开大《资本经营》形成性考核123答案+终结性考试答案.docx 2025国开山东《小学生心理健康教育》形考123答案+终结性考试答案.docx 2025国开《视频策划与制作》形考任务1-4答案.docx 2025国开《亲子关系与亲子沟通》形考任务234答案+期末大作业答案.docx 2025国开电大《煤矿地质》形成性考核123答案.docx 2025国开电大《冶金原理》形考任务1234答案.docx 2025国开《在线学习项目运营与管理》形考任务1234答案.doc 2025国开电大《在线教育的理论与实践》阶段测验1-4答案.docx 2024 年注册环保工程师《专业基础考试》真题及答案解析【完整版】.docx 环保工程师---2023 年注册环保工程师《专业基础考试》真题及答案解析【完整版】.docx 2025国开《液压与气压传动》形考任务一参考答案.docx 2025年春江苏开放大学教育研究方法060616计分:形成性作业2、3答案.docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.