我今天应该使用 TCHAR 吗?
Should I use TCHAR today
我开始为 Windows 桌面开发一个用 C++ 编写的全新项目。当我学习 Windows 编程时,我读到使用 TCHAR 是一个很大的改进,因为我可以在不更改代码的情况下构建程序的 ANSI 或 Unicode 版本。但是,我从未真正使用过该选项来构建 ANSI 版本。此外,在 C++ 的标准库中,没有 TCHAR,我必须为 std::string、std::stringstream 等及其对应的宽字符串创建 typedef。所以目前我正在考虑放弃TCHAR转而支持wchar_t,我收集了以下优点和缺点。
优点:
- TCHAR 是一个宏,所以如果我不使用它,前端编译器和 Intellisense 会给出更好的结果。
- 变量的类型更明确。
- L"" 比 _T("") 更容易输入。
缺点:
- 失去关于字符类型的模块化(即使我真的不需要 ANSI 版本,我发现使用抽象字符类型是一个很好的功能,如果将来我需要一个 UTF- 8 或 UTF-32 版本?)。
- 我必须用 W 为一些 API 函数添加后缀,比如 GetWindowTextW。
还有我的问题:
- 在 C++ 标准库中有没有比我上面描述的更简单的方法来使用 TCHAR?就像具有这些 typedef 的标准头文件一样?
- 你觉得我的推理正确吗?
- 我是否遗漏了任何重要的点?
- 当今最先进的解决方案是什么?专业的 Windows 程序员是否仍然使用 TCHAR(在新代码中)?
- 如果我删除 TCHAR,我应该写 L"" 还是 u"" 而不是 _T("")?
在现代 windows 中,所有 ANSI 函数都在内部将 char*
转换为 wchar_t*
并调用同一函数的 unicode 版本。基本上,通过采用 TCHAR
而不是 wchar_t
你什么也得不到,但必须处理古怪的语法。
我开始为 Windows 桌面开发一个用 C++ 编写的全新项目。当我学习 Windows 编程时,我读到使用 TCHAR 是一个很大的改进,因为我可以在不更改代码的情况下构建程序的 ANSI 或 Unicode 版本。但是,我从未真正使用过该选项来构建 ANSI 版本。此外,在 C++ 的标准库中,没有 TCHAR,我必须为 std::string、std::stringstream 等及其对应的宽字符串创建 typedef。所以目前我正在考虑放弃TCHAR转而支持wchar_t,我收集了以下优点和缺点。
优点:
- TCHAR 是一个宏,所以如果我不使用它,前端编译器和 Intellisense 会给出更好的结果。
- 变量的类型更明确。
- L"" 比 _T("") 更容易输入。
缺点:
- 失去关于字符类型的模块化(即使我真的不需要 ANSI 版本,我发现使用抽象字符类型是一个很好的功能,如果将来我需要一个 UTF- 8 或 UTF-32 版本?)。
- 我必须用 W 为一些 API 函数添加后缀,比如 GetWindowTextW。
还有我的问题:
- 在 C++ 标准库中有没有比我上面描述的更简单的方法来使用 TCHAR?就像具有这些 typedef 的标准头文件一样?
- 你觉得我的推理正确吗?
- 我是否遗漏了任何重要的点?
- 当今最先进的解决方案是什么?专业的 Windows 程序员是否仍然使用 TCHAR(在新代码中)?
- 如果我删除 TCHAR,我应该写 L"" 还是 u"" 而不是 _T("")?
在现代 windows 中,所有 ANSI 函数都在内部将 char*
转换为 wchar_t*
并调用同一函数的 unicode 版本。基本上,通过采用 TCHAR
而不是 wchar_t
你什么也得不到,但必须处理古怪的语法。