#define DEBUG(X) cout<<#X " = " << X << endl
上面的这个定义可以打印任何变量的值。我们也可以得到一个跟踪信息,在此信息里打印出它们执行的语句。
宏中的#代表字符串定义,它允许设定一个标识符并把它设为字符串。
#define TRACE(S) cout << #S << endl; S
# S定义了要输出的语句。第2个S重申了语句,所以这个语句被执行。当然,这可能会产生
问题,尤其是在一行f o r循环中。
for (int i = 0 ; i < 100 ; i++ )
TRACE(f(i)) ;
因为在TRACE( )宏里实际上有两个语句,所以一行 f o r循环只执行第一个。解决方法是在宏中用逗号代替分号.
标志粘贴
标志粘贴在写代码时是非常有用的。它让我们设两个标识符并把它们粘贴在一起自动产生
一个新的标识符。例如:
#define FILED(A) char* A##_string;int A##_size
class record{
FILED(one);
FILED(two);
FILED(three);
}
每次调用FIELD( ) 宏,将产生一个保存字符串的标识符和另一个保存字符串长度的标识符。