显式使用Unicode / ANSI Windows API并让它们由别名处理之间的区别?

时间:2016-04-04 06:27:54

标签: c++ winapi unicode ansi

我明确地将我在项目中使用的每个Win32 API定义为W(宽)或A(ANSI)并让它由解决方案/项目配置决定之间的区别是什么?除了能够动态改变它,就是这样。

说我出于某种原因目前只需要Unicode,让我们自动扩展到正确的或者明确定义它们会更好吗? 如果我只针对ANSI或Unicode进行开发而不是同时支持这两种系统,它会在发布时破坏某些系统吗?

2 个答案:

答案 0 :(得分:3)

最新版本的Windows基于" ANSI" charset(Windows 9x)很久以前就已经到了终点。所有较新的版本(基于NT),甚至是嵌入式版本,都使用UTF-16来提供完整的Unicode支持。对于那些,所有ANSI函数都实现为包装器,这会导致开销(转换需要时间和空间)和数据丢失(ANSI只是Unicode的一个子集)。

我只会使用宽版本。特别是,在导出接口时,我会避免使用基于TCHAR的字符串,因为它需要我提供两种不同的实现,因为它不应该是现代代码所必需的。

答案 1 :(得分:1)

你应该更喜欢W变体的主要原因是当你处理字符串时A调用是不可靠的 - 它们总是暗示隐式代码页,它是可变的。所以程序行为取决于系统设置,这从来都不是好事。他们未来重新定义TCHAR的可能性非常接近零 - 这种变化没有技术优势,它会破坏很多东西,因此担心这一点毫无意义。