是否傻傻分不清楚?
在Win32编程中,我们经常会看到这么一些东西:TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE。
反正我是傻傻分不清楚,今天就来简单的说道说道。
首先的一个问题:为什么Windows要用不同的方式来描述同一件事儿(Unicode字符串)呢?
说道说道
这种设计背后,确实有它的一个成熟套路,下面请听我好好分解。
不带下划线的普通版本会影响Windows头文件中的默认字符集。因此,如果定义UNICODE,则GetWindowText将映射到GetWindowTextW而不是例如GetWindowTextA。
同样,TEXT宏将映射到L”…”而不是“…”。
带下划线的版本会影响C运行时头文件中的默认字符集。因此,例如,如果定义_UNICODE,则_tcslen将映射到wcslen而不是strlen。同样,_TEXT宏将映射到L”…”而不是“…”。
_T呢? 好吧,我不知道那一个。也许这玩意儿仅仅是为了节省码农的打字时间吧。
总结
我的经验是:总是拥抱Unicode版本,不管怎么样。
所以,我总是这样定义我的字符串L”HelloWorld”。但是对于API,我还是会调用通用版本,例如我会使用GetWindowText,而不是GetWindowTextW。
对于字符串操作,我也是调用通用版本,例如,我会使用_tcslen,而不是wcslen。
所以,你会看到,我还是尽量遵循微软老大哥的文档办事儿。
但是,不管如何,你需要了解这些名词背后的含义,才能融会贯通。
相对于modern language来说,C/C++真是…太难了。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《TEXT vs. _TEXT vs. _T, and UNICODE vs. _UNICODE》
领取专属 10元无门槛券
私享最新 技术干货