如何在 C 中引用 UTF-16 字符?

How to refer to UTF-16 character in C?

现在我正在为我的库编写一个 C .header 文件,它处理 UTF-16 个字符。

此 .h 应在 MSVC/GCC 中的 Linux/Windows 32/64 bits 上编译。 因为它是一个 lib 头文件,所以我不能坚持使用 C99 及更高版本。所以我不能使用 wchar_tuint16_t。如何指定 UTF-16 变量?

到目前为止我是这样的:

#if _WIN32 
  typedef wchar_t char_UTF16;
#else 
  #if __GNUC__
    typedef unsigned short char_UTF16;
  #else
    #error "Compiler not supported"
  #endif
#endif

但我真的不认为这是最好的解决方案。

您可以以与编译器无关的方式尝试一些内置类型:

#include <limits.h>
#include <wchar.h>

#if (WCHAR_MAX==65535) && WCHAR_MIN==0
typedef wchar_t char_UTF16;
#elif USHRT_MAX==65535
typedef unsigned short char_UTF16;
#elif UINT_MAX==65535
typedef unsigned char_UTF16;
#else
#    error "Cannot find 16-bit type"
#endif

(尝试 unsigned long 没有意义,因为标准要求它至少为 32 位宽)

...虽然,我不确定您是否应该尝试 wchar_t,可能我会直接选择数字类型,否则您可能会冒着让客户假设的风险,例如宽字符文字是您的库的 "right" 类型,而实际上它们仅在 Windows.