我们知道#define定义宏有两种用法:
一种用法如下:#define 宏名 替代文本
另一种用法如下:#define 宏名
在第一种用法中,预处理指令#define与宏名之间,以及宏名与替代文本之间均必须有空格隔开,空格数目均可不限,其表示用替代文本去替换宏。在第二种用法中,预处理指令#define与宏之间必须有空格,空格数目也不限,仅表示宏已被定义。两种用法中的整个内容均必须本质上在同行,也就是让编译器理解是在同一行的。在第一种用法中,用#define定义宏时,若内容过长,一行写不下,可以用“\”来指示编译器连接行,表示将本行从“\”之前内容和下一行连接成一行。
使用时应注意四点:
第一,“\”的位置不限,可以在任何地方。
第二,“\”仅起到指示连接行的作用,其本身不代表任何类型的空格。
第三,“\”之后不可有任何内容,除空格外。
第四,“\”之前的所有空格都有效,会被连接成行内容,而其后的所有空格都无效。
以上便是“\”在#define预处理指令中的用法,但“\”并非只能用在#define语句中,而是可以用在程序文本的任何地方,用法不变。
以下便是两个例子,在Visual C++ 6.0下编译通过。
// “\”在#define预处理指示中的用法示例
#include <stdio.h>
#define sum(a,b,c) \
(a+b+c)
int main(int argc,char* argv[]) {
printf("%d\n", sum(1,3,5));
return 0;
}
// “\”普适用法举例
#include <stdio.h>
int main(int argc, char* argv[]) {
printf("abcde\
f\n");
printf("abcdef\
\n");
return 0;
}