此處使用到一個特殊的宏:#
#的作用是給其後的參數添加一對雙引號。
運行一下下面的例子代碼:
#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或者調試信息的輸出搭建一個簡潔方便的平台了。