Programming Windows 笔记:An Introduction to Unicode (二)
本文为《Programming Windows, Fifth Edition》(Charles Petzold 著)第2章 “An Introduction to Unicode” 的学习笔记总结。
维护单一源代码
一种解决办法是使用微软Visual
C++自带的TCHAR.H头文件。该头文件不属于ANSI
C标准范畴,因此其中定义的所有函数与宏定义名称均以下划线开头。 TCHAR.H
为常规需要传入字符串参数的运行时库函数提供了一套别名(例如:_tprintf
和
_tcslen)。这类名称有时被称作「通用」函数名,因为它们既可以对应函数的Unicode版本,也可以适配非Unicode版本。
例如,如果定义了 _UNICODE 标识符,则会按如下方式定义名为
__T 的宏:
1 |
这个语法属于ANSI C标准中C预处理器的规范内容。这组双井号被称为
标记拼接符,作用是将字母L追加到宏参数。因此,若宏参数为“Hello!”,那么
L##x 就会等效为 L"Hello!"。 如果未定义
_UNICODE 标识符,则 __T
宏将按以下方式简单定义:
1 |
另外两个宏被定义为与 __T 等同:
1 |
在 _T 或 _TEXT 宏内部定义字符串字面量:
1 | _TEXT ("Hello!") |
如果定义了 _UNICODE
标识符,这样操作会将字符串解析为宽字符组成;若未定义该标识符,则会将其解析为8位字符。
UNICODE vs
_UNICODE
在 Microsoft Visual Studio 里,_UNICODE
是一个预处理宏,通常和 UNICODE
一起控制是否使用宽字符(UTF-16)版本的 Windows API。
| 宏 | 作用 |
|---|---|
UNICODE |
控制 Windows API(如 CreateFile →
CreateFileW) |
_UNICODE |
控制 C 运行库(如 _tprintf) |
在 Visual Studio 里:启用了 Unicode 字符集会自动添加
UNICODE;_UNICODE 宏。