C语言程序设计(第4章函数)6
4.7 C语言预处理程序及注释
C程序的源代码可以包含各种编译指令,这些指令称为预处理指令。虽然它们实际上不是C语言的一部分,但它们扩展了C编程的环境。本节将介绍如何应用预处理器和注释来简化程序开发过程并提高程序的可读性。
4 . 7 . 1 ANSI标准定义的C语言预处理器
C语言预处理器包括以下命令:
# define
# error
# include
# if
# else
# elif]# ifdef
# ifndef
# undef
# line
# pragma
很明显所有预处理命令都以符号#开头,它
4.7.2 #define
命令#define定义标识符和字符串。每次在源程序中遇到这个标识符,它都被一个定义的字符串所替换。ANSI标准将标识符定义为宏名,替换过程称为宏替换。命令的一般形式是:
# define identifier string
注意,该语句中没有分号。标识符和字符串之间可以有任意数量的空单元格。字符串一旦开始,就只能以新的一行结束。
比如想让true取值1,FALSE取值0,可以解释两个宏# define
# define ture 1
# define FA L S E 0
。这就让你每次在源程序中遇到的时候都用0或1代替true或Fal S E。
比如在屏幕上打印“0 1 2”:
printf(" % d % d % d ",FALSE,TRUE,TRUE+1);;
定义宏名后,它可以成为其他宏名定义的一部分。例如,下面的代码定义了1、2和3的值。
# define one 1
# define two one+one
# define two one+two
理解宏替换只是一个字符串而不是标识符很重要。因此,如果要定义一个标准的错误消息,可以编写如下代码:
# define e _ ms " standard error on input \ n "
printf(e _ ms);
当编译器遇到标识符E_MS时,它会将其替换为“输入时的标准错误\n”。对于编译器,printf()语句实际上是以下形式:
printf("标准输入错误\ n ");
如果标识符包含在字符串中,它将不会被替换。示例:
#定义XYZ这是一个测试
...
printf(" XYZ ");
这一段没有打印“这是一个测试”,而是“XYZ”。
如果字符串长度超过一行,可以在行尾加上反斜杠继续该行,例如:
# define long _ string“这是一个很长的字符串,用作示例”
C语言程序一般用大写字母来定义标识符。这种约定使得人们在阅读程序时能够快速找到哪里有宏替换。就是把所有的
0条评论