gpt4 book ai didi

C++ 编译。翻译阶段#1。通用字符名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:34 25 4
gpt4 key购买 nike

我不明白它在 C++ 标准中的含义:

Any source file character not in the basic source character set (2.3) is replaced by the universal-character-name that designates that charac- ter. (An implementation may use any internal encoding, so long as an actual extended character encountered in the source file, and the same extended character expressed in the source file as a universal-character-name (i.e., using the \uXXXX notation), are handled equivalently except where this replacement is reverted in a raw string literal.)

据我所知,如果编译器发现字符不在基本字符集中,它只是将其替换为这种格式的字符序列 '\uNNNN''\UNNNNNNNN'。但我不知道如何获得这个 NNNN 或 NNNNNNNN。所以这是我的问题:如何进行转换

最佳答案

注意前面的句子:

Physical source file characters are mapped, in an implementation-defined manner, to the basic source character set (introducing new-line characters for end-of-line indicators) if necessary.

也就是说,编译器如何实际解释构成文件的字符或字节完全取决于编译器。在进行这种解释时,它必须决定哪些物理字符属于基本源字符集,哪些不属于。如果一个字符不属于,则将其替换为通用字符名称(或者至少,效果就好像它已经完成了)。

这样做的目的是将源文件减少到一个非常小的字符集——基本源字符集中只有 96 个字符。任何不在基本源字符集中的字符已被 \uU 和一些十六进制数字 (0-F).

通用字符名称是以下之一:

\uNNNN
\UNNNNNNNN

其中每个 N 都是一个十六进制数字。这些数字的含义在 §2.3 中给出:

The character designated by the universal-character-name \UNNNNNNNN is that character whose character short name in ISO/IEC 10646 is NNNNNNNN; the character designated by the universal-character-name \uNNNN is that character whose character short name in ISO/IEC 10646 is 0000NNNN. If the hexadecimal value for a universal-character-name corresponds to a surrogate code point (in the range 0xD8000xDFFF, inclusive), the program is ill-formed.

ISO/IEC 10646 标准起源于 Unicode 并定义了通用字符集 (UCS)。它为字符分配了代码点,并指定了这些代码点应该如何编码。 Unicode 联盟和 ISO 小组随后联手开发 Unicode。 Unicode 标准比 ISO/IEC 10646 规定的更多(算法、功能字符规范等),但现在这两个标准保持同步。

因此您可以将 NNNNNNNNNNNN 视为该字符的 Unicode 代码点。

例如,考虑源文件中包含以下内容的一行:

const char* str = "Hellô";

由于 ô 不在基本源字符集中,该行在内部被翻译为:

const char* str = "Hell\u00F4";

这将给出相同的结果。

您的代码中只有某些部分允许使用通用字符名称:

关于C++ 编译。翻译阶段#1。通用字符名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com