标识符中的 UTF-8 字符:G 的有限支持
尽管支持扩展标识符,G 4.7 仍缺乏对 UTF-8 字符的支持在标识符中。当尝试使用 Unicode 字符时会出现此问题,例如笑脸表情符号 (U 1F603),根据 C 标准(附录 E.1)这是允许的。
G 中的 Unicode 字符限制
最初,作者尝试使用通用字符名称(Uxxxx)来表示 Unicode 字符。然而,G 拒绝了这种方法,理由是“U0001F603”在标识符中无效。
-fextend-identifiers 的有限功能
-fextended-identifiers 选项虽然声称扩展了标识符支持,但在 G 4.7 中却存在不足。它仅承认 ucnid.tab 中定义的一小部分字符,符合过时的 C 98 和 C99 标准。
跨编译器兼容性
自 GCC 4.9 起,添加了对C11字符集的支持。这允许使用 U0001F603 作为标识符。然而,即使使用 GCC 8.2,使用表情符号的原始代码仍然存在问题。
相比之下,Clang 3.3 的代码没有任何问题,即使没有其他选项,例如 -fextended-identifiers 或 -finput-charset=UTF -8.
以上是尽管有扩展标识符支持,为什么 G 4.7 仍难以处理标识符中的 UTF-8 字符?的详细内容。更多信息请关注PHP中文网其他相关文章!