无参数的宏定义的一般格式为:#define标识符字符串
例如:#define PI 3.1415926
说明:
(1)标识符为所定义的宏名,也叫符号常量,通常用大写字母表示。
(2)字符串又叫作宏值,可以是常数、表达式、格式串等,但一般不要以分号结束。
(3)宏名的有效范围为定义命令之后到本源文件结束。C语言中虽然运行#define出现在程序中的任何位置,但是一般总是将它写在程序的最开头的位置。
【例9-2】输入圆半径并求出其面积。
程序代码:
【程序说明】
(1)语句#define PI 3.1415926是宏定义,此例中定义了PI这个名字来代替“3.1415926”这个字符串。宏的优点在于能使用户用一个简单而有意义的名字来代替一个较长的字符串,从而减少重复书写某些字符串的工作量,减少输入过程中出错的可能。
(2)语句s=PI*r*r中直接使用了PI,这称为“宏调用”,即直接用宏名代表一个字符串。
(3)程序中出现“宏名”后,在预处理时将使用“宏值”对“宏名”进行替换,这个过程称为“宏替换”或“宏展开”。但这仅是一个简单的替换,不分配内存,也不会做正确性检查。
如语句:(www.xing528.com)
s=PI*r*r;
在经过预处理后,其中的PI直接被替换,该语句为:
s=3.1415926*r*r;
这也是前边强调宏定义后不加分号的原因,如将定义改为:
#define PI 3.1415926;
“宏值”是一个字符串,任何出现在宏值中的字符都会被作为字符串的一部分,因此此时PI代表的将是“3.1415926;”而不是“2.1415926”。
经过宏展开后,该语句为:
s=3.1415926;*r*r;
但是这类错误在“宏展开”时根本不做检查,只是完成一个简单的替换。只有在编译时,编译器才会提示语法错误。
(4)由于C语言中双引号是字符串的界定符,因此程序中出现由双引号括起来的字符串即使和符号常量相同,预处理时也不进行宏替换。
(5)运行使用已经定义的宏名来定义新的宏名,在宏展开时由预处理程序层层替换。
【例9-3】利用嵌套宏定义求圆面积。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。