惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
B
Blog
F
Fortinet All Blogs
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
A
About on SuperTechFans
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog
B
Blog RSS Feed

博客园 - 林杰的博客

7z系列之一:7zip SDK中C++模块的编译 WORD2012 中使用“全屏阅读” Office2012中使用“冻结窗格”功能锁定标题栏 开发工具:Visual Studio 2005下方便宜用的代码行统计工具 为Visual Assist设置快捷键 Visual Studio 2010的Python支持工具 Linux 使用pid文件结束nginx 让Win7资源管理器显示图片内容预览 Python 单元测试带案例名称输出 Linux 系统安装配置NTP时间服务器 Editplus中.proto文件的高亮文件 c#美味: 微软图表控件MSChart安装部署 测试工具:用性能监视器查看程序的性能 C#美味:Linq入门 讲座 C++零食:VC中使用ForceInclude来强制包含stdafx.h C++零食:重启后消失的注册表键值 C++零食:WTL中使用双缓冲避免闪烁 C++零食:wprintf 中使用%I64d格式化输出LONGLONG C++零食:HRESULT 与 Windows Error Codes 不是一回事
C++零食:使用Unicode版的预定义宏__FUNCTION__
林杰的博客 · 2010-10-19 · via 博客园 - 林杰的博客

在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;
}