宏定义宏与函数的区别文件包含条件编译PPT学习教案_第1页
宏定义宏与函数的区别文件包含条件编译PPT学习教案_第2页
宏定义宏与函数的区别文件包含条件编译PPT学习教案_第3页
宏定义宏与函数的区别文件包含条件编译PPT学习教案_第4页
宏定义宏与函数的区别文件包含条件编译PPT学习教案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1宏定义宏与函数的区别文件包含条件编宏定义宏与函数的区别文件包含条件编译译第六章 预处理 内容提要:内容提要:宏定义概念与定义形式宏定义概念与定义形式宏定义与函数调用的区别宏定义与函数调用的区别文件包含文件包含条件编译条件编译 宏定义 宏与函数的区别 文件包含 条件编译第1页/共23页编译时预处理是编译时预处理是C C语言区别于其它高级语言语言区别于其它高级语言的特征之一,的特征之一, 即在通常的编译(即在通常的编译( 包括词法、包括词法、语法、代码生成、优化等语法、代码生成、优化等 )之前,先对程序)之前,先对程序中的特殊命令进行中的特殊命令进行“预处理预处理”,然后再进行编,然后再进

2、行编译。译。宏定义;宏定义;预处理功能主要有三种:预处理功能主要有三种:条件编译。条件编译。文件包含;文件包含;第六章 预处理第2页/共23页9.1 宏定义宏定义# #define define 宏名宏名替换字符串替换字符串宏定义的一般格式:宏定义的一般格式:# #define define 宏名宏名替换字符串替换字符串宏定义的一般格式:宏定义的一般格式:宏定义就是用一个宏名代替一个字符宏定义就是用一个宏名代替一个字符串,以简化编程,提高程序的可读性;串,以简化编程,提高程序的可读性;注意:注意:宏名必须定义在前引用在后,宏名必须定义在前引用在后,其后不要加其后不要加“;”号。号。第3页/共2

3、3页宏定义指令的最终作用是要求预编译器宏定义指令的最终作用是要求预编译器在源程序中寻找宏名,并将所有的这些在源程序中寻找宏名,并将所有的这些“宏名宏名”用用“替换字符串替换字符串”替换。替换。# #define define 宏名宏名替换字符串替换字符串宏定义的一般格式:宏定义的一般格式:# #define define 宏名宏名替换字符串替换字符串宏定义的一般格式:宏定义的一般格式:第4页/共23页第5页/共23页运行结果:area=28.274333第6页/共23页9.2 带参的宏定义带参的宏定义说明:说明:相应实参可以是较复杂的表达式,此时为得到相应实参可以是较复杂的表达式,此时为得到正

4、确的结果,应当在替换字符串的形式参数外面加上正确的结果,应当在替换字符串的形式参数外面加上一个括号。宏名与带参数的括号之间不应加空格,非一个括号。宏名与带参数的括号之间不应加空格,非则将出错。则将出错。不仅可以进行简单的字符替换,还可以进行不仅可以进行简单的字符替换,还可以进行参数替换,改参数可以是表达式。参数替换,改参数可以是表达式。# #define define 宏名宏名( (参数参数) ) 替换字符串替换字符串带参带参宏定义的一般格式:宏定义的一般格式:# #define define 宏名宏名( (参数参数) ) 替换字符串替换字符串带参带参宏定义的一般格式:宏定义的一般格式:第7页

5、/共23页运行结果:area=40.715040第8页/共23页第9页/共23页运行结果:area=66.4760993.1415926*(a+1)*(a+1)第10页/共23页9.3 正确区分在正确区分在形式上形式上相似的宏与函数的概念相似的宏与函数的概念设有以下设有以下: :带参的宏:带参的宏:S(a+1)S(a+1) 函数调用:函数调用:sqrt(a+1.5)sqrt(a+1.5)宏定义与函数调用的区宏定义与函数调用的区别有别有:先求表达式的值,然后先求表达式的值,然后进行形实结合的数据传进行形实结合的数据传递,返回一个值,有类递,返回一个值,有类型的概念。型的概念。只作简单的字符替只作

6、简单的字符替换,不进行值的传换,不进行值的传递,也没有返回值递,也没有返回值和类型的概念和类型的概念操作内容操作内容在程序运行时处理在程序运行时处理在预编译时处理在预编译时处理处理时间处理时间函数调用函数调用带参宏定义带参宏定义先求表达式的值,然后先求表达式的值,然后进行形实结合的数据传进行形实结合的数据传递,返回一个值,有类递,返回一个值,有类型的概念。型的概念。只作简单的字符替只作简单的字符替换,不进行值的传换,不进行值的传递,也没有返回值递,也没有返回值和类型的概念和类型的概念操作内容操作内容在程序运行时处理在程序运行时处理在预编译时处理在预编译时处理处理时间处理时间函数调用函数调用带参

7、宏定义带参宏定义第11页/共23页#define FUDGE(K) K+3.14159#define PR(a) printf(%3d,(int)(a)#define PRINT(a) PR(a); printf(%4dn, +a)void main()int i, x=2;PR(x*FUDGE(2);for(i=0; i5; i+)PRINT(i); 例例9 9- -4:4:课堂实践课堂实践,阅读程序给出结果。,阅读程序给出结果。第12页/共23页第13页/共23页运行结果:7 0 1 2 3 4 6第14页/共23页9.4 文件包含文件包含说明:说明:filenamefilename可以是

8、:可以是: “*.*.h h”标题文件(头文件)。其中包含标题文件(头文件)。其中包含一些库函数的原型说明、公用性的符号常数、一些库函数的原型说明、公用性的符号常数、带参的宏定义、类型的定义、全局变量等。带参的宏定义、类型的定义、全局变量等。文件包含是指将另外的文件包含到本文件之中文件包含是指将另外的文件包含到本文件之中# #include include 或或# #include include “filenamefilename”文件包含文件包含一般格式:一般格式:# #include include 或或# #include include “filenamefilename”文件包含文

9、件包含一般格式:一般格式:第15页/共23页9.4 文件包含文件包含说明:说明:filenamefilename可以是:可以是: “*.*.c c”源程序等文件,即另一个指定文源程序等文件,即另一个指定文件的全部内容。件的全部内容。文件包含是指将另外的文件包含到本文件之中文件包含是指将另外的文件包含到本文件之中# #include include 或或# #include include “filenamefilename”文件包含文件包含一般格式:一般格式:# #include include 或或# #include include “filenamefilename”文件包含文件包含一般

10、格式:一般格式:第16页/共23页执行结果执行结果执行结果执行结果模块模块A#include 模块模块Bmath.hfile1.c预编译模块模块A#include 模块模块Bmath.hfile1.c预编译模块模块A模块模块B模块模块A模块模块B编译编译目标目标模块模块可执行可执行程序程序库函数库函数或其它目或其它目标程序标程序链接目标目标模块模块可执行可执行程序程序库函数库函数或其它目或其它目标程序标程序链接运行运行C C程序的编程序的编译运行过程译运行过程第17页/共23页9.5 条件编译条件编译通过条件编译指令通过条件编译指令, ,可以控制编译器有选择可以控制编译器有选择地进行编译,满足

11、条件时编译某一组语句地进行编译,满足条件时编译某一组语句, ,否否则编译另一组语句。则编译另一组语句。利用条件编译指令利用条件编译指令, ,可以控制产生不同的版可以控制产生不同的版本,对于程序调试、移植都是非常有用的。本,对于程序调试、移植都是非常有用的。第18页/共23页结构一:结构一: # #ifdef ifdef 标识符标识符程序段程序段1 1#elseelse程序段程序段22# #endifendif几种常用的条件编译结构:几种常用的条件编译结构:编译条件的真假由标识符是否在此之前用编译条件的真假由标识符是否在此之前用# #definedefine指令定义过来决定。其中指令定义过来决定

12、。其中# #elseelse部分是可选的。部分是可选的。第19页/共23页结构二:结构二:# #ifndef ifndef 标识符标识符程序段程序段1 1#elseelse程序段程序段22# #endifendif结构二的作用与结构二的作用与结构一阵好相反,如结构一阵好相反,如果标识符未被定义过果标识符未被定义过,编译程序段,编译程序段1 1,否,否则编译程序段则编译程序段2 2。结构三:结构三:# #if if 表达式表达式e e程序段程序段1 1#elseelse程序段程序段22# #endifendif结构三中,当表结构三中,当表达式达式e e的值为非的值为非0 0时,时,条件成立,编译

13、程序条件成立,编译程序段段1 1,否则编译程序,否则编译程序段段2 2。第20页/共23页结构四:结构四:# #if if 常量常量表达式表达式e e1 1程序段程序段1 1# #elif elif 常量常量表达式表达式e e2 2程序段程序段2 2# #elif elif 常量常量表达式表达式e en n程序段程序段n n#else#else程序段程序段n+1n+1# #endifendif结构四中,预编译结构四中,预编译程序将依顺序计算表程序将依顺序计算表达式达式e ei i的值的值, ,当计算到当计算到某表达式某表达式e ek k的值为非的值为非0 0时,则程序段时,则程序段k k被编译

14、被编译,其后的表达式将不,其后的表达式将不再计算,其他的程序再计算,其他的程序段也将不被编译。若段也将不被编译。若所有表达式的都为所有表达式的都为0 0,则程序段则程序段n+1n+1被编译。被编译。第21页/共23页# #include include #include #include #define EPS 1e#define EPS 1e- -7 7void main()void main()double udf_sin(double x);double udf_sin(double x);/用户自定义函数原型说明用户自定义函数原型说明double a; scanf(%lf,&a);double a; scanf(%lf,&a);printf(%f %fprintf(%f %f n,udf_sin(a), sin(a);n,udf_sin(a), sin(a); double udf_sin( double x )double udf_sin( double x )/用户自定义函数用户自定义函数double sum, term, n=1; sum=term=x;double sum, term, n=1; sum=term=x;while( fabs(term)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论