为什么C99对通用字符名称有如此奇怪的限制?

时间:2013-11-23 04:16:09

标签: c unicode

6.4.3 Universal character names

  

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

除了这种限制不再具有“普遍性”这一事实外,我无法想出这种限制的充分理由。有人知道背景故事吗?

1 个答案:

答案 0 :(得分:6)

D800DFFF包含的内容不是有效的代码点;它们是高低代理,只能以UTF-16编码成对出现,以便代表基准平面之外的代码点。

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

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