background image

定义时的值。宏最常见的用法是定义代表某个值的全局符号。宏的第二种用法是定义带参

数的宏,这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的

实际参数来代替定义中的形式参数。

1.#define 指令

#define 预处理指令是用来定义宏的。该指令最简单的格式是:首先神明一个标识符,然后

给出这个标识符代表的代码。在后面的源代码中,就用这些代码来替代该标识符。这种宏

把程序中要用到的一些全局值提取出来,赋给一些记忆标识符。

#defineMAX_NUM10

intarray[MAX_NUM];

for(i=0;i<MAX_NUM;i++)/*……*/

在这个例子中,对于阅读该程序的人来说,符号 MAX_NUM 就有特定的含义,它代表的

值给出了数组所能容纳的最大元素数目。程序中可以多次使用这个值。作为一种约定,习

惯上总是全部用大写字母来定义宏,这样易于把程序红的宏标识符和一般变量标识符区

别开来。如果想要改变数组的大小,只需要更改宏定义并重新编译程序即可。

宏表示的值可以是一个常量表达式,其中允许包括前面已经定义的宏标识符。例如:

#defineONE1

#defineTWO2

#defineTHREE(ONE+TWO)

注意上面的宏定义使用了括号。尽管它们并不是必须的。但出于谨慎考虑,还是应该加上

括号的。例如:

six=THREE*TWO;

预处理过程把上面的一行代码转换成:

six=(ONE+TWO)*TWO;

如果没有那个括号,就转换成 six=ONE+TWO*TWO;了。

宏还可以代表一个字符串常量,例如:

#defineVERSION"Version1.0Copyright(c)2003"

2.带参数的#define 指令

带参数的宏和函数调用看起来有些相似。看一个例子: