宏定义命令 #define 用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串,在程序
中每次遇到该标识符时就用所定义的字符串替换它,其作用相当于给置顶的字符串起一个别名。
不带参数的宏定义一般格式如下:
1> “#”表示这是一条预处理命令
2>“宏名”是一个标识符,必须符合C语言标识符的规定
3>“字符串”在此可以是常数、表达式、格式字符串等
例如:
其作用是在该程序中用PI替代3.14159,在编译预处理时,每当在源程序中遇到PI就自动用3.14159
代替。
使用#define进行宏定义的好处是需要改变一个常量的时候只需要改变#define命令行,整个程序的常
量都会改变,大大提高了程序的灵活性。
宏名要简单且意义明确,一般习惯用大写字母表示,以便与变量名相区别。
注意:宏定义不是C语句,不需要在行末加分号。
宏名定义后,即可成为其他宏名定义中的一部分。例如,下面代码定义了正方形的边长SIDE、周
长PERIMETER及面积AREA的值。
前面强调过宏替换是以串代替标识符,这一点要牢记。因此,如果希望定义一个标准的邀请语,
可编写如下代码。
编译程序遇到标识符STANDARD时,就会用"You are welcome to join us."替换。
对于编译程序,printf()语句如下形式是等效的。
printf("You are welcome to join us.");
对于不带参数的宏定义有以下几点要强调一下:
1、如果在串中含有宏名,则不进行替换。
例如:
该段代码的输入结果如下:
注意上面程序字符串中的TEST并没有用"this is an example"来替换,所以说如果串中含有宏名,
则不进行替换。
2、如果串长于一行,可以在该行末尾用一反斜杠“\”续行。
3、#define 命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到此源文件结束。
注意:在编写程序时通常将所有的#define放到文件的开始处或独立的文件中,而不是将它们分散到
整个程序中。
4、可以用#undef命令终止宏定义的作用域。
例如以下程序
程序输出为:
修改程序为:
使用#undef,然后再打印 TEST,会报错
显示TEST未定义。