宏定义 宏与函数的区别.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:11 大小:33KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

宏定义 宏与函数的区别.doc

宏定义宏与函数的区别.doc

预览

免费试读已结束,剩余 1 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第六章预处理★内容提要:宏定义概念与定义形式宏定义与函数调用的区别文件包含条件编译宏定义宏与函数的区别文件包含条件编译编译时预处理是C语言区别于其它高级语言的特征之一,即在通常的编译(包括词法、语法、代码生成、优化等)之前,先对程序中的特殊命令进行“预处理”,然后再进行编译。⑴宏定义;预处理功能主要有三种:⑶条件编译。⑵文件包含;第六章预处理9.1宏定义#define宏名替换字符串宏定义的一般格式:#define宏名替换字符串宏定义的一般格式:宏定义就是用一个宏名代替一个字符串,以简化编程,提高程序的可读性;注意:宏名必须定义在前引用在后,其后不要加“;”号。宏定义指令的最终作用是要求预编译器在源程序中寻找宏名,并将所有的这些“宏名”用“替换字符串”替换。#define宏名替换字符串宏定义的一般格式:#define宏名替换字符串宏定义的一般格式:运行结果:area=28.274333运行结果:area=28.2743339.2带参的宏定义说明:相应实参可以是较复杂的表达式,此时为得到正确的结果,应当在替换字符串的形式参数外面加上一个括号。宏名与带参数的括号之间不应加空格,非则将出错。不仅可以进行简单的字符替换,还可以进行参数替换,改参数可以是表达式。#define宏名(参数)替换字符串带参宏定义的一般格式:#define宏名(参数)替换字符串带参宏定义的一般格式:运行结果:area=40.715040运行结果:area=40.715040运行结果:area=66.476099运行结果:area=66.4760993.1415926*(a+1)*(a+1)9.3正确区分在形式上相似的宏与函数的概念设有以下:带参的宏:S(a+1)函数调用:sqrt(a+1.5)宏定义与函数调用的区别有:先求表达式的值,然后进行形实结合的数据传递,返回一个值,有类型的概念。只作简单的字符替换,不进行值的传递,也没有返回值和类型的概念操作内容在程序运行时处理在预编译时处理处理时间函数调用带参宏定义先求表达式的值,然后进行形实结合的数据传递,返回一个值,有类型的概念。只作简单的字符替换,不进行值的传递,也没有返回值和类型的概念操作内容在程序运行时处理在预编译时处理处理时间函数调用带参宏定义#defineFUDGE(K)K+3.14159#definePR(a)printf("%3d",(int)(a))#definePRINT(a)PR(a);printf("%4d\n",++a)voidmain(){inti,x=2;PR(x*FUDGE(2));for(i=0;i或#include“filename”文件包含一般格式:#include或#include“filename”文件包含一般格式:9.4文件包含说明:filename可以是:“*.c”源程序等文件,即另一个指定文件的全部内容。文件包含是指将另外的文件包含到本文件之中#include或#include“filename”文件包含一般格式:#include或#include“filename”文件包含一般格式:执行结果执行结果模块A#include模块Bmath.hfile1.c预编译模块A#include模块Bmath.hfile1.c预编译模块A模块B模块A模块B编译编译目标模块可执行程序库函数或其它目标程序链接目标模块可执行程序库函数或其它目标程序链接运行运行C程序的编译运行过程9.5条件编译通过条件编译指令,可以控制编译器有选择地进行编译,满足条件时编译某一组语句,否则编译另一组语句。利用条件编译指令,可以控制产生不同的版本,对于程序调试、移植都是非常有用的。结构一:#ifdef标识符程序段1[#else程序段2]#endif几种常用的条件编译结构:编译条件的真假由标识符是否在此之前用#define指令定义过来决定。其中#else部分是可选的。结构二:#ifndef标识符程序段1[