【发布时间】:2013-07-25 12:32:54
【问题描述】:
我正在阅读 GCC C 预处理器 -> Tokenization,其中提到
预处理标记分为五类:
- 标识符
- 预处理数字
- 字符串字面量
- 标点符号
- 其他。
任何其他单个字符都被视为“其他”。 它不受干扰地传递到预处理器的输出。 C 编译器几乎肯定会拒绝包含“其他”标记的源代码。 在 ASCII 中,唯一的其他字符是“@”、“$”、“`”和其他控制字符 比 NUL(所有位为零)。
我也在浏览网页时遇到了“C 字符集”,其中他们提到了“@”作为字符之一。 提到“@”作为“C 字符集”之一的文章是错误的吗?还是我的理解有误?
谢谢。
【问题讨论】:
-
我有点不清楚您所说的“C 字符集”是什么意思。您能否提供一个参考,说明您在哪里找到了该术语?
-
@JoachimPileborg: c4learn.com/character-set-in-c-programming.html
-
@JoachimPileborg 遗憾的是,该链接所说的内容与标准中的任何内容绝对没有关系。这只是某人的幻想。该标准规定“物理源文件字符以实现定义的方式映射到基本源字符集。”它还需要一个实现来识别 Unicode 字符输入为
"\uxxxx" or"\Uxxxxxxxx"`,并明确表示它可以在内部将这些字符表示为 Unicode,而不是作为通用字符名称。 -
@JoachimPileborg 关于可移植的源文件......这在形式上是不可能的,因为一个编译器可能使用 EBCDIC,另一个 UTF-8。在实践中,您可能希望将源文件限制为 95 个可打印的 ASCII 字符以及行分隔符。您需要将其转码为 EBCDIC,但否则您阅读它可能没有问题。
-
@字符应该保留在 C 之外的一个原因是它在 Objective-C 中使用。这是区分 Objective-C 和 C 的唯一特征。(直到最近的规范改变了 Objective-C,但我需要离题更多。)。即使某些编译器允许它也不是一件好事。