c++ 宏 #val 在unicode下的使用

以下是对c++中宏#val在unicode下的使用方法进行了详细的分析介绍,需要的朋友可以参考下
 

#define CHECK(condition) cout<<check failed:<<#condition<<endl;

上面这句宏,当你 CHECK(myfunc()); 时,假设myfunc返回false,会输出:check failed:myfunc()

在宏中,#condition 是把参数转换为字符串,这在打印log时,可以很方便的打印出函数名称等等

这个大家可能都知道了,太小儿科了,但是,当你在unicode下用的时候,很可能会出现乱码

解决的办法是 #condition 替换为 L## #conditon

复制代码 代码如下:

#define CHECK(condition) cout<<check failed:<<L## #condition<<endl;

时间: 2024-11-03 08:34:58

c++ 宏 #val 在unicode下的使用的相关文章

浅析c++ 宏 #val 在unicode下的使用_C 语言

#define CHECK(condition) cout<<check failed:<<#condition<<endl; 上面这句宏,当你 CHECK(myfunc()); 时,假设myfunc返回false,会输出:check failed:myfunc() 在宏中,#condition 是把参数转换为字符串,这在打印log时,可以很方便的打印出函数名称等等 这个大家可能都知道了,太小儿科了,但是,当你在unicode下用的时候,很可能会出现乱码 解决的办法是

Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error) .解决办法

Unicode下TRACE中文(_CrtDbgReport: String too long or IO Error)        在使用Unicode的工程项目中,如果是Debug模式.当TRACE Unicode字符串时,会输出提示:_CrtDbgReport: String too long or IO Error 有两种方法来解决这个问题 方法一:直接使用 OutputDebugString 替换 TRACE 相关说明:函数原型:void OutputDebugString(LPCTS

windows下cmd命令

转载纯粹是为了找的时候方便. 转载地址:http://greatverve.cnblogs.com/archive/2011/12/09/windows-cmd.html 命令简介 cmd是command的缩写.即命令行 .     虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一般Windows 的各种版本都与其兼容,用户可以在Windows 系统下运行DOS,中文版Windows XP 中的命令

关于Unicode字符集

最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符.显然,这样要表示各种语言中所有的字符是远远不够的.Unicode4.0规范考虑到了这种情况,定义了一组附加字符编码,附加字符编码采用2个16位来表示,这样最多可以定义1048576个附加字符,目前unicode4.0只定义了45960个附加字符. Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间

编写符合ANSI和Unicode的应用程序

世界真的很奇妙,分久必合,合久必分. 计算机发展到今天,多国之间的交流日益广泛,软件本地化是重大趋势.如果减少本地化工作就是一件值得考虑的事情. 软件本地化要解决的真正问题就是如何来处理不同的字符集.要知道,单字节字符是一个8位的数据来表示的. 因此,它最多能表示256个字符. 全世界那么多个国家,256个怎么够. 因此人们提出了双字节(DBCS)来解决这个问题. 单字节与双字节字符集 ----->多字符集 当表示英文或某些符号的时候,就采用一个字节来表示,而当表示日文,中文等字符的时候,就采用

cstring 转换 char* (VS2008下测试成功)

问题描述 //将CString转成char,之前发过一贴只能转单字节字母组成的字符串,以下可转中文,未验证其它语言char*CStringToCharArray(CStringstr){char*ptr;#ifdef_UNICODELONGlen;len=WideCharToMultiByte(CP_ACP,0,str,-1,NULL,0,NULL,NULL);ptr=newchar[len+1];memset(ptr,0,len+1);WideCharToMultiByte(CP_ACP,0,

关于在UNICODE CString转UTF-8

问题描述 关于在UNICODE CString转UTF-8 如何Unicode下,将CString转成UTF-8.例如:CString xx=""您好""CSting str=URLEnCode(xx);转换后的结果:str的内容就是%e6%82 解决方案 CString str(_T(""我是中国人"")); CT2A szUtf8(strCP_UTF8); string s_utf8(szUtf8); CString st

LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址

在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取struct in_pktinfo(struct in_pktinfo是struct msghdr中msg_control的成员).in_pktinfo 结构体(如下所示),我们可以从in_pktinfo中获取路由目的地址(destination address of the packet).头标识

如何在linux下检测内存泄漏

1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名.行号以及内存大小.该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部. 在 linux 或者 unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额.而且程序退出时,我们无法获知任何内存泄漏信息.为了更好的辅助在 linu