1、Windows使用两种字符集ANSI和UNICODE
Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。
而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。
_T()和_L()的区别在于,_L不管你是以什么方式编译,一律以以 UNICODE方式保存。
Visual C++里边定义字符串的时候,用_T来保证兼容性,VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
如果将来你不打算升级到unicode,那么也不需要_T
#ifdef UNICODE #define _tcscpy wcscpy #else #define _tcscpy strcpy #endif _tcscmp -- strcmp wcscmp lstrlen -- strlen lstrlenW wprintf -- printf
2、VS2017正则替换字符串,将所有的"..."字符串替换成_T("...")
将所有的"..."字符串替换成_T("..."),但是不能替换#include后面的字符串。由于vs的正则表达式懒惰跟贪婪控制语法不明确,只好用3条表达式来分步骤实现:
(1)把已有的_T("")替换为""
_T\x28(\".+?\")\x29
$1
(2)把""替换为T("")
(\".+?\")
_T($1)
(3)把误判的#include _T("")替换回来#include ""
#include\s*_T\x28(\".+?\")\x29
#include $1
记得要勾选“使用正则表达式”,查找文件类型请使用C++的源文件和头文件。
---
VS2017正则表达式说明