gpt4 book ai didi

c - C中的Unicode字符

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:54 25 4
gpt4 key购买 nike

C 标准是否要求编译器能够处理未编码为 ascii 的文件?具体来说,我想知道 utf-8 文件是否符合标准。 C89、C99 和 C11 对上一个问题的回答是否不同?

假设在 C 源文件中使用 ASCII 之外的字符是合法的,哪些用法是合法的?

我可以想到几个不同的用例:

  1. 在评论中
  2. 在字符串中
  3. 在标识符内
  4. 在宏名称中

这是一个显示所有四个的示例:

#ifdef PRINT_©
// Print out the © notice
cont char my©Notice[] = "This program is © 2016 ACME INC";
puts(my©Notice);
#endif

如果C允许非ASCII字符出现在上面列出的用法中,对可以使用的代码点有什么限制吗?

请记住,这是关于 C 标准的问题。我已经意识到将 unicode 字符放入标识符和宏中会使代码更难使用。

最佳答案

它是实现定义的,因此不受标准约束。

我知道至少有一种编译器,即 clang,它要求源代码是 UTF-8。但是其他编译器可能会使用其他要求,或者不允许。

从 C99 开始,标识符允许包含多字节字符,但在 C99 之前,它是允许非基本字符存在的扩展。 C11 扩展了允许的字符集。

对于标识符中允许的字符有一些额外的限制,并且 © 不在列表中。它在附录 D 中列出。这些是 Unicode 点,但这并不严格意味着文件中的编码必须基于 unicode。

允许的字符范围

  • 00A8, 00AA, 00AD, 00AF, 00B2−00B5, 00B7−00BA, 00BC−00BE, 00C0−00D6, 00D8−00F6, 00F8−00FF
  • 0100−167F, 1681−180D, 180F−1FFF
  • 200B−200D, 202A−202E, 203F−2040, 2054, 2060−206F
  • 2070−218F、2460−24FF、2776−2793、2C00−2DFF、2E80−2FFF
  • 3004−3007, 3021−302F, 3031−303F
  • 3040−D7FF
  • F900−FD3D、FD40−FDCF、FDF0−FE44、FE47−FFFD
  • 10000−1FFFD、20000−2FFFD、30000−3FFFD、40000−4FFFD、50000−5FFFD、60000−6FFFD、70000−7FFFD、80000−8FFFD、90000−9FFFD、A0000−AFFFD、B0000−BFFFD、C0000 , D0000−DFFFD, E0000−EFFFD

最初不允许的字符范围

  • 0300−036F, 1DC0−1DFF, 20D0−20FF, FE20−FE2F

关于c - C中的Unicode字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40090243/

25 4 0
文章推荐: python - 如何将表情符号替换为文本中的单词?
文章推荐: html - 从其他文件覆盖 CSS
文章推荐: python - 将参数传递给 Python 脚本
文章推荐: html - 是否可以将背景图像添加到 JSP 页面上的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com