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 ...
随机推荐
- php 即时输出
<?phpset_time_limit(0);ob_end_clean();ob_implicit_flush(1);$i=0;while ( $i>=0 ) { sleep(1); ec ...
- 利用socket模块检查端口存活并邮件警报
可以用来监控一些端口. import socket def check_server(addr, port): s = socket.socket() try: s.connect((addr, po ...
- JQuery简介及HelloWorld
一.JQuery是什么: -JQuery是一个JavaScript框架. 二.JQuery的优点: –轻量级 –强大的选择器 –出色的 DOM 操作的封装 –可靠的事件处理机制 –完善的 Ajax – ...
- redis------del命令
删除 可以删除给定的一个或多个key; set keyname1 name1 set keyname2 name2 set keyname3 name3 del keyname1 keyname ...
- python常用正则表达式
匹配特定数字:^[1-9]\d*//匹配正整数−[1−9]\d∗ //匹配负整数^-?[1-9]\d*//匹配整数[1−9]\d∗|0 //匹配非负整数(正整数 + 0)^-[1-9]\d*|0// ...
- DOM操作-动态创建网页元素
动态创建新的DOM元素,是JavaScript操作网页对象模型的重要手段之一 代码: <!DOCTYPE html> <html> <head> <title ...
- hdu_5807_Keep In Touch(分段dp)
题目链接:hdu_5807_Keep In Touch 题意: 在Byteland一共有nn个城市,编号依次为11到nn,同时有mm条单向道路连接着这些城市,其中第ii条道路的起点为u_iui, ...
- CentOS 7 BIND 主从搭建
主机 10.2.0.15 从机 10.2.0.14 1 主机配置$vim /etc/named.bodani.com.zones zone"bodani.com" IN { typ ...
- PHP数组函数试题
使用Ctrl+A查看答案 1.将数组的键名全部转换成小写和大写的函数是什么?答:array_change_key_case($array [,CASE_LOWER|CASE_UPPER]) 2.创建一 ...
- postfix日志分析pflogsumm
1.pflogsumm功能:统计接收.投递.转发.延时.反弹.拒绝.保留.丢弃的邮件统计发件人和收件人 统计发送和接受方主机/域名 统计SMTPD连接数...... 2.安装# yum install ...