__STDC_ISO_10646__到底是什么意思

What does __STDC_ISO_10646__ exactly mean?

本文关键字:是什么 意思 10646 STDC ISO      更新时间:2023-10-16

我很难理解宏__STDC_ISO_10646__,从我的C++标准副本:

__STDC_ISO_10646__

格式为 yyyymmL 的整数常量(例如,199712L)。如果 这个符号被定义,那么Unicode中的每个字符都需要 当存储在类型为 wchar_t 的对象中时,set 具有与 该字符的短标识符。所需的 Unicode 集 由 ISO/IEC 10646 定义的所有字符组成, 以及指定的所有修订和技术勘误 年和月。

根据我的理解,这意味着系统上wchar_t将代表 unicode 代码点。这是对的吗?如果是这种情况,那么 utf-8 和 utf-16 编码将不符合,而 utf-32 将符合对吗?另外,还有哪些其他字符编码符合要求?

您引用的标准部分(§16.8 预定义宏名称 [cpp.predefined])在一系列定义前面加上:

¶2 以下宏名称由实现有条件地定义:

这意味着如果实现不能满足要求(例如,因为wchar_t是 16 位类型),那么实现将不会定义__STDC_ISO_10646__

另一方面,如果wchar_t是 32 位或更大的类型,则实现很可能能够定义宏。 ISO 10646只需要21位来表示所有字符,但对于(几乎)所有实际目的,这意味着16位wchar_t太小,而32位wchar_t足够大。 这也意味着从头开始实现可能会使wchar_t变成 32 位类型。 如果预先存在的实现在此选项标准化之前选择了 16 位wchar_t,则它们可能会受到向后兼容性的阻碍。

当 unicode 字符存储在 wchar_t 中时,该宏与该字符的值相关。

更具体地说,ISO/IEC 10646标准支持更多字符,因为对标准进行了修正。

可以定义为宏值的年份和月份意味着,当您将 Unicode 字符存储到wchar_t变量时,将存储在该变量中的 unicode 字符的值将是给定年份和月份中有效的值。

有关 Unicode 短标识符的参考,请参阅此处[http://www.unicode.org/charts/][1]

希望这有帮助

莱夫特里斯