把符号转化为字符串的宏技巧
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或者调试信息的输出搭建一个简洁方便的平台了。
[]
- ››字符串格式化工具
- ››转化服务器端传回的JSON数据
- ››字符串近似匹配算法
- ››字符串分割的两种方法
- ››符号文件——Windows 应用程序调试必备
- ››字符串类数据列类型(参考)
- ››字符串的一些操作
- ››字符串中文的问题
- ››字符串中包含双引号
- ››字符串函数大全
更多精彩
赞助商链接