3.9.2 把变量和表达式转换成字符串
写调试代码的时候,编写由包含变量名和后跟变量的字符数组组成的打印表达式是很乏味的。幸运的是,标准C具有字符串化运算符‘#’,它在本章前面使用过的。在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。把这一点与没有插入标点符号的若干个字符数组结合而连接成一个单独的字符数组,能够生成一个十分方便的宏用于调试期间打印出变量的值:
如果调用宏PR(a)来打印变量a的值,它和下面的代码有同样的效果:
整个表达式工作过程一样。下面的程序使用一个宏创建了一种速记方式打印出字符串化的表达式,然后计算表达式并打印出结果:
可以看到像这样的技术是如何成为必不可少的,特别是在没有调试器(或者必须使用多个开发环境)的情况下。当不想调试时,也可以插入一个#ifdef使得定义的P(A)不起作用。