我今天应该使用TCHAR

时间:2016-11-30 11:45:25

标签: c++ winapi tchar

我开始研究用C ++编写的Windows桌面的全新项目。当我学习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""或者你""而不是_T("")?

1 个答案:

答案 0 :(得分:1)

在现代窗口中,所有ANSI函数都在内部将char*转换为wchar_t*并调用相同函数的unicode版本。基本上,通过采用TCHAR代替wchar_t,你什么也得不到,但必须处理古怪的语法。