WEB开发网
开发学院软件开发VC 把符号转化为字符串的宏技巧 阅读

把符号转化为字符串的宏技巧

 2007-03-21 21:28:45 来源:WEB开发网   
核心提示:此处使用到一个特殊的宏:##的作用是给其后的参数添加一对双引号,运行一下下面的例子代码:#define Enum2Str(e) #eenum VALUE{ ONE ,TWO ,THREE };void test(VALUE v);void main(){test(ONE);}void test(VALUE v){swi

此处使用到一个特殊的宏:#

#的作用是给其后的参数添加一对双引号。

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

#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("
")
//改写上面的例子
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或者调试信息的输出搭建一个简洁方便的平台了。

Tags:符号 转化 字符串

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接