此处使用到一个特殊的宏:#
#的作用是给其后的参数添加一对双引号。
运行一下下面的例子代码:
#define Enum2Str(e) #e enum VALUE{ ONE ,TWO ,THREE }; void test(VALUE v); void main() { test(ONE); } void test(VALUE v) { switch(v) { case ONE: cout << Enum2Str(ONE) << endl;break; case TWO: cout << Enum2Str(TWO) << endl;break; case THREE: cout << Enum2Str(THREE) << endl;break; } } 看了结果之后,相信你对这个宏有了初步的认识,事实上,它可以把任意的符号转化为字符串,也就是说,你不仅可以用来输出enum值,而且可以用来输出函数名,变量名等。 很容易想到的一个用途就是用来做log或者用以输出调试信息。 这里提供一个简单的例子:#define Symbol2Str(s) #s //利用OutputDebugString输出调试信息: #define MyCase(e) case e: OutputDebugString("VALUE is "); \ OutputDebugString(Symbol2Str(e) ); \ OutputDebugString("\n") //改写上面的例子 enum VALUE{ ONE ,TWO ,THREE }; void test(VALUE v); void main() { test(ONE); } void test(VALUE v) { switch(v) { MyCase(ONE);break; MyCase(TWO);break; MyCase(THREE);break; } } 注意,为了使用OutputDebugString,你必须包含windows.h 到此为止,相信你已经可以用这个宏为自己的log或者调试信息的输出搭建一个简洁方便的平台了。 |
正在阅读:把符号转化为字符串的宏技巧把符号转化为字符串的宏技巧
2005-06-06 09:55
出处:
责任编辑:moningfeng