首页 理论教育 C语言程序设计(第3版)-无参数宏

C语言程序设计(第3版)-无参数宏

时间:2023-11-23 理论教育 版权反馈
【摘要】:宏定义中宏名常用大写字母表示,宏名与字符串之间用空格分隔。例如,定义数组的大小:这时数组的大小为100,若改变数组大小,则:#define ARR_SIZE 200宏定义命令一般写在文件开头、函数之前,作为文件的一部分,宏名的有效范围为宏定义之后到本源文件结束。如果要强制终止宏定义的作用域,可以使用#undef命令。

C语言程序设计(第3版)-无参数宏

无参宏定义通常用来定义符号常量,即用一指定的宏名(标识符)来代表一个字符串,一般形式为:

#define 宏名 字符串

这就是已经介绍过的定义符号常量。例如:

# define PI 3.1415926

它的作用是指定用标识符PI来代替“3.1415926”这个字符串。在编译预处理时,将程序中在该命令以后出现的所有的PI都用“3.1415926”代替。该过程称为宏展开。

宏定义中宏名常用大写字母表示,宏名与字符串之间用空格分隔。# define是宏定义命令。其中字符串可以是一个数值型数据、表达式或字符串。例如:

【例8.1】从键盘连续输入字符,统计其中的大写字母的个数,直到按Esc键结束。

其中,预处理程序将此程序中凡是出现Esc的地方都用27替换。如果Esc的编码值有所变化,只需修改宏定义语句即可,这样有助于程序的调试和移植。

使用符号常量应注意的事项如下。

(1)预处理模块只是用宏名做简单的替换,不做语法检查,若字符串有错误,只有在正式编译时才能检查出来。

(2)没有特殊的需要,一般在预处理语句的行末不加分号,若加了分号,则连同分号一起替换。例如:

经宏展开后,while语句变为:

while((c=getchar())!=27;)(www.xing528.com)

显然有错误,即表达式变成了语句。

(3)使用宏定义可以减少程序中重复书写字符串的工作量,提高程序的可移植性。例如,定义数组的大小:

这时数组的大小为100,若改变数组大小,则:

#define ARR_SIZE 200

(4)宏定义命令一般写在文件开头、函数之前,作为文件的一部分,宏名的有效范围为宏定义之后到本源文件结束。如果要强制终止宏定义的作用域,可以使用#undef命令。例如:

符号常量PI的有效域是到“#undef PI”语句为止,这样就可以灵活控制宏定义的作用范围。

(5)定义符号常量时,可以引用已定义的符号常量。例如:

预编译后,该程序经宏(符号常量)展开后为:

(6)程序中用双括号括起来的字符串中的字符,若与符号常量同名,不进行替换。例如第(5)条的例子中printf函数内有两个L字符和两个S字符,在双引号内的L、S字符不被替换,而在双引号外的L、S字符将被替换。

【例8.2】已知一梯形的上下两边的长分别为a和b,输入高h,求其面积。

程序如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈