【问题标题】:Why C99 has such an odd restriction for universal character names?为什么 C99 对通用字符名称有如此奇怪的限制?
【发布时间】:2013-11-23 04:16:09
【问题描述】:

6.4.3 Universal character names

通用字符名称不得指定短标识符小于 00A0 的字符,除了 0024 ($)、0040 (@) 或 0060 (`),也不得指定 D800 到 DFFF 范围内的字符。

除了这样的限制不再是“普遍”的事实之外,我想不出这样一个限制的充分理由。有人知道背后的故事吗?

【问题讨论】:

  • 想想哪些字符进入了禁止范围。控制字符、已经具有其他含义的字符和代理。

标签: c unicode


【解决方案1】:

D800DFFF(含)不是有效的代码点;它们是高低代理,只能在 UTF-16 编码中成对找到,以便表示基本平面之外的代码点。

另一个限制是避免通用字符名称与可以在 C 字符集中表示的字符发生冲突,以便编译器不会费心将通用字符名称解析为其 unicode 等效项。因此编译器没有义务识别写为\u002B+ 或知道a\u0061 代表相同的名称。 ($@` 在 cmets 和字符串之外的 C 程序中无效,因此它们不需要特别注意词法分析器。)

小于A0 的代码点范围还包括控制字符和空格。 (C 不认为\u00A0 是空格。)

【讨论】:

  • @CoryNelson:谢谢。固定。
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 2018-09-13
  • 1970-01-01
  • 2014-02-26
  • 2010-11-30
  • 2017-09-22
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多