从VC6.0过渡到VS2013的程序员应该都会对字符的表现形式感到困惑,每每都要使用_T(""),才能如愿地显示字符。
其实_T("")是一个宏,起一个兼容的作用,使编译器采用默认的字符集形式(Ansi或Unicode)编译字符串。
在VC2013的 tchar.h 文件中,我提取出了部分代码,如下:
#ifdef _UNICODE
// ...
#define __T(x) L ## x
// ...
#else
// ...
#define __T(x) x
// ...
#endif /* _UNICODE */
// ...
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
再来说说字符集。
Windows下使用两种字符集,Unicode和Ansi。当前的Windows环境下,Unicode字符集以双字节形式储存,Ansi以单字节形式存储(也就是8位的char)。
据我了解,VC6.0编译器默认采用Ansi字符集,VS2010还是从哪一版本开始的,就默认采用Unicode字符集了。
至于为什么会有Unicode字符集,主要是因为8位的Ansi字符集最多可以表示256个字符,仅