闂傚倷娴囬妴鈧柛瀣崌閺岀喖顢涘⿰鍐炬毉濡炪們鍎婚幏锟� (0) +1 闂備浇宕垫慨宥咁吋閸℃浼� (0) +1 闂傚倸鍊搁オ瀛樼閻戣棄绠柨鐕傛嫹 (0) +1
闂傚倷娴囬妴鈧柛瀣崌閺岀喖顢涘⿰鍐炬毉濡炪們鍎查崹鍧楀蓟閻旇 鍋撳☉娅亝鎱ㄩ崶褉鏀芥い鏇炴鐎氾拷闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛鎰嚋閼板潡鏌涘☉娆愮稇缂備讲鏅犻弻鐔碱敍濠婂喚鏆銈冨劵閹凤拷>>

正在阅读:把符号转化为字符串的宏技巧把符号转化为字符串的宏技巧

2005-06-06 09:55 出处: 作者:Panic 责任编辑:moningfeng
此处使用到一个特殊的宏:# #的作用是给其后的参数添加一对双引号。

运行一下下面的例子代码:

#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或者调试信息的输出搭建一个简洁方便的平台了。

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
闂傚倷绀佺紞濠傖缚瑜旈、鏍幢濡炵粯鏁犻梺閫炲苯澧撮柟顔款潐閹峰懘宕ㄦ繝鍌欐樊婵犵妲呴崑鎾诲箯閿燂拷闂傚倷鐒﹂幃鍫曞磿閹惰棄纾绘繛鎴欏灩閺勩儵鎮橀悙鏉垮珟濞存粍绮撻弻娑㈩敃閿濆棛顦ラ梺鍛婃閹凤拷