广东省自考信息网欢迎各位自考生,本站非政府官方网站,官方信息以广东省教育考试院(http://eea.gd.gov.cn)为准。

咨询热线:400-8077-735

自考办电话| 自考提问 | 公众号

搜索

城市: 广州 深圳 佛山 珠海 东莞 中山 惠州 肇庆 汕头 韶关 湛江 江门 茂名 梅州 汕尾 河源 阳江 清远 潮州 揭阳 云浮
自考专题: 广东省自考管理系统 广东自考成绩查询系统 准考证打印入口 广东自考视频解读 学历查询入口 微信公众号 考生交流群 在线咨询/解答 开考科目查询
您当前所在位置: 串讲笔记 > 《高级语言程序设计》知识点总结(九)

《高级语言程序设计》知识点总结(九)

日期:2018-05-23 12:26:55  编辑整理:广东自考信息网  【打印】  浏览(0

 9.1  宏定义

  宏定义有无参数宏定义和带参数宏定义两种。

  无参数的宏定义的一般形式为

  # define 标识符 字符序列

  其中# define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔。这种宏定义要求编译预处理程序将源程序中随后所有的定名的出现(注释与字符串常量中的除外)均用字符序列替换之。前面经常使用的定义符号常量是宏定义的最简单应用。如有:

  # define TRUE 1

  # define FALSE 0

  则在定义它们的源程序文件中,凡定义之后出现的单词TRUE将用1替代之;出现单词FALSE将用0替代之。

  在宏定义的#之前可以有若干个空格、制表符,但不允许有其它字符。宏定义在源程序中单独另起一行,换行符是宏定义的结束标志。如果一个宏定义太长,一行不够时,可采用续行的方法。续行是在键人回车符之前先键入符号“\”。注意回车要紧接在符号“\”之后,中间不能插入其它符号。

  宏定义的有效范围称为宏定义名的辖域,辖域从宏定义的定义结束处开始到其所在的源程序文件末尾。宏定义名的辖域不受分程序结构的影响。可以用预处理命令#undef终止宏定义名的辖域。

  在新的宏定义中,可以使用前面已定义的宏名。例如,

  # define R 2.5

  # define PI 3.1415926

  # define Circle 2*PI*R

  # define Area PI* R * R

  程序中的Circle被展开为2*3.1415926* 2.5, Area被展开为3.1415926*2.5*2.5.

  如有必要,宏名可被重复定义。被重复定义后,宏名原先的意义被新意义所代替。

  通常,无参数的宏定义多用于定义常量。程序中统一用宏名表示常量值,便于程序前后统一,不易出错,也便于修改,能提高程序的可读性和可移植性。特别是给数组元素个数一个宏定义,并用宏名定义数组元素个数能部分弥补数组元素个数固定的不足。

  注意:预处理程序在处理宏定义时,只作字符序列的替换工作,不作任何语法的检查。如果宏定义不当,错误要到预处理之后的编译阶段才能发现。宏定义以换行结束,不需要分号等符号作分隔符。如有以下定定义:

  # define PI 3.1415926;

  原希望用PI求圆的周长的语句

  c=2*PI*r;

  经宏展开后,变成

  c=2*3.1415926*r;

  这就不能达到希望的要求。

  带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替换。带参数定定义的一般形式为

  # define 标识符(参数表)字符序列

  其中参数表中的参数之间用逗号分隔,字符序列中应包含参数表中的参数。在定义带参数的宏时,宏名标识符与左圆括号之间不允许有空白符,应紧接在一起,否则变成了无参数的宏定义。如有宏定义:

  # define MAX(A,B) ((A) > (B)?(A):(B))

  则代码 y= MAX( p+q, u+v)将被替换成 y=((p+q) >(u+v)?(p+q):(u+v)。

  程序中的宏调用是这样被替换展开的,分别用宏调用中的实在参数字符序列(如p+q和u+V) 替换宏定义字符序列中对应所有出现的形式参数(如用p+q替代所有形式参数A,用u+V替代所有形式参数B),而宏定义字符序列中的不是形式参数的其它字符则保留。这样形成的字符序列,即为宏调用的展开替换结果。宏调用提供的实在参数个数必须与宏定义中的形式参数个数相同。

  注意:宏调用与函数调用的区别。函数调用在程序运行时实行,而宏展开是在编译的预处理阶段进行;函数调用占用程序运行时间,宏调用只占编译时间;函数调用对实参有类型要求,而宏调用实在参数与宏定义形式参数之间没有类型的概念,只有字符序列的对应关系。函数调用可返回一个值,宏调用获得希望的C代码。另外,函数调用时,实参表达式分别独立求值在前,执行函数体在

[1]    


本文标签:广东自考串讲笔记《高级语言程序设计》知识点总结(九)

转载请注明:文章转载自(http://www.gdzkw.net

本文地址:http://www.gdzkw.net/cj/5448.html

热点关注:

广东自考成绩查询【小程序查分】图文流程方式

广东省2020年1月自考成绩于3月31日公布

《广东省自考信息网》免责声明:
(一)由于考试政策等各方面情况的不断调整与变化,本网站所提供的考试信息仅供参考,请以权威部门公布的正式信息为准。
(二)本网站在文章内容来源出处标注为其他平台的稿件均为转载稿,免费转载出于非商业性学习目的,版权归原作者所有。如您对内容、版权等问题存在异议请与本站联系,我们会及时进行处理解决。联系邮箱:812379481@qq.com。
立即获取备考方案

已帮助5w万+意向学历提升用户
成功上岸!