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;
}
C++零食:使用Unicode版的预定义宏__FUNCTION__的更多相关文章
- 关于标准C语言的预定义宏【转】
标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来. __LINE__ 当 ...
- C++ 中常见预定义宏的使用
http://blog.csdn.net/hgl868/article/details/7058906 替代字符串: #define DOWNLOAD_IMAGE_LOG /var/log/png.l ...
- 第 16 章 C 预处理器和 C 库(预定义宏)
/*------------------------------------- predef.c -- 预定义宏和预定义标识符 ------------------------------------ ...
- (一)预定义宏、__func__、_Pragma、变长参数宏定义以及__VA_ARGS__
作为第一篇,首先要说一下C++11与C99的兼容性. C++11将 对以下这些C99特性的支持 都纳入新标准中: 1) C99中的预定义宏 2) __func__预定义标识符 3) _Pragma操作 ...
- 预定义宏__GNUC__和_MSC_VER
一.预定义__GNUC__宏 1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏.需要针对gcc编写代码时, 可以使用该宏进行条件编译. 2 __GNUC__ 的值表示gcc的版本.需要针对 ...
- 预定义宏_GNUC_ _MSC_VER
一.预定义__GNUC__宏 1 __GNUC__ 是gcc编译器编译代码时预定义的一个宏.需要针对gcc编写代码时, 可以使用该宏进行条件编译. 2 __GNUC__ 的值表示gcc的版本.需要针对 ...
- 关于VC预定义常量_WIN32,WIN32,_WIN64等预定义宏的介绍(整理、转载)
参考帖子: (1)MSDN上专门讲预定义宏:https://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx (2)VS中属性页的配置介绍 ...
- EventHandler 与常见的.Net预定义委托
看着下面这两句事件定义及激发忽然有点不明白了, public event EventHandler<ExternalDataEventArgs> Submit; Submit(null, ...
- VS2013 预定义的宏
Visual Studio 2013 预定义的宏 https://msdn.microsoft.com/zh-cn/library/b0084kay(v=vs.120).aspx 列出预定义的 ANS ...
随机推荐
- Spring框架--AOP编程
2 手动实现AOP编程 AOP 面向切面的编程, AOP可以实现"业务代码"与"关注点代码"分离 // 保存一个用户 public void add(User ...
- GRPC: set up..
get the grpc source file.. git clone https://github.com/grpc/grpc git submodule update --init --recu ...
- 模板singleton模式的C++实现
模板singleton模式的C++实现 近期回过头整理了一下singleton模式,看了别人写的关于singleton的介绍.发现这个singleton模式虽然简单,但要写一个稳定/线程安全/泛型的模 ...
- Screen tearing
Umm, screen tearing happens when the frame rate and the monitor refresh rate don't match. When that ...
- 第四十一节,xml处理模块
XML是实现不同语言或程序之间进行数据交换的协议,XML文件格式如下 读xml文件 <data> <country name="Liechtenstein"> ...
- JavaScript shift() 方法
http://www.w3school.com.cn/jsref/jsref_shift.asp 定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法 arr ...
- CentOS7 PostgreSQL 安装
PostgreSQL安装 安装使用yum安装 (找源 http://yum.postgresql.org/) yum install https://download.postgresql.org/p ...
- User.java 实体类 带 数据库字段模板
package com.tgb.web.controller.entity; import javax.persistence.Column; import javax.persistence.Ent ...
- 转: Windows下安装Oracle Database 12c Release 1(12.1.0.2.0) - Enterprise Edition
http://www.cnblogs.com/xqzt/p/4395053.html Windows下安装Oracle Database 12c Release 1(12.1.0.2.0) - Ent ...
- servlet多次跳转报IllegalStateException异常
当发生在如下错误的时候,有一个方案可行, "java.lang.IllegalStateException: Cannot forward after response has been c ...