#在预处理中有3个特殊用法:字符串定义、字符串串联和标志粘贴。
1)字符串定义的完成是用 #指示,它容许设一个标识符并把它转化为字符串,然而字符串串联发生在当两个相邻的字符串没有分隔符时,在这种情况下字符串组合在一起。在写调
试代码时,这两个特征是非常有效的。
例如,
#define PRINT(X) cout<<#X " = " << X << endl
当我们在代码中要打印一个表达式的值,比如a+b+c时,就可以直接调用PRINT(a+b+c).
打印结果是:a+b+c=10。
这比自己手工输入代码,要高效:
cout<<"a + b + c = " << X << endl
2)标示粘贴
可以将两个字符串连接在一起,作为一个新的标识符。如下面定义:
#define FIELD(A) char* A##_string; int A##_size
在给定的字符串后分别连接_string和_size,构成新的标识符。
如下面的类定义中:
class Record {
FIELD(one);
FIELD(two);
FIELD(three);
// ...
};
实际生成的变量为:one_string, one_size, two_string, two_size, three_string, three_size。
总之,预处理玩的是文字替换的游戏,#相当于是占位符的作用。