C++零食:使用Unicode版的预定义宏__FUNCTION__

在C++中支持一种预定义宏。比如:

__FILE__: 就是当前源代码文件名

__LINE__: 就是当前源代码的行号

这些宏可以在printf等语句中直接作为字符串使用,调试的时候很方便。

如下代码所示:

int _tmain(int argc, _TCHAR* argv[])
{
    printf("Line:%d", __LINE__);
    return 0;
}

执行后如图:

Line:12

为了方便使用,微软在VC中还定义了一些它特有的宏,如:

__FUNCTION__:返回当前代码所在函数的名字

示例:

int _tmain(int argc, _TCHAR* argv[])
{
    printf("Function Name:%s", __FUNCTION__);
    return 0;
}

执行后:

Function Name:wmain

不过,这些宏都是ANSI版本的。没有Unicode版本,实际使用时有点麻烦。

__FUNCTIONW__

今天查找了下资料,找到了解决办法,与大家分享。

yvals.h 定义了一个__FUNCTIONW__ ,即Unicode版本的__FUNCTION__

所以如果需要使用Unicode版本的话,直接包含这个头文件,然后使用即可:

#include <yvals.h>

int _tmain(int argc, _TCHAR* argv[])
{
    wprintf(L"Function Name:%s", __FUNCTIONW__);
    return 0;
}

如果你不想包含yvals.h的话,可以在你的头文件上面加下面的三句定义,也可以使用了:

#define __STR2WSTR(str) L##str
#define _STR2WSTR(str) __STR2WSTR(str)
#define __FUNCTIONW__ _STR2WSTR(__FUNCTION__)

int _tmain(int argc, _TCHAR* argv[])
{
    wprintf(L"Function Name:%s", __FUNCTIONW__);
    return 0;
}
原文地址:https://www.cnblogs.com/spriteflk/p/4067531.html