7

我的程序员的直觉会说 c 中的字符常量(例如:'x')是使用编译它的机器上的机器字符集编码的。但是,以下摘录来自“The C Programming Language: ANSI C Edition”

“字符常量是用单引号括起来的一个或多个字符的序列,如'x'。只有一个字符的字符常量的值是执行时机器字符集中字符的数值。”

强调最后三个字。

谁能解释为什么他们会说“在执行时”。字符值肯定是在编译后的二进制文件(或 ELF、A.OUT...)中编码的吗?

我想知道,但无法对此提出任何合乎逻辑的解释,K&R 肯定知道他们在做什么!

4

4 回答 4

2

You will have to tell the compiler what system you are going to run the program on. It will then choose the proper encoding for the characters.

Of course, default is to run on a system similar to the one running the compiler. In that case the compile time and runtime character sets will be identical.

于 2013-01-17T17:28:32.420 回答
1

您的问题似乎在于您将机器的字符集与使用的字符编码混淆。

阅读此http://www.microsoft.com/typography/unicode/cs.htm以了解字符集的实际含义。KnR(第 2 版)当时的问题是计算机太多,有些是为当地政府和公众制造的。这导致两台计算机之间出现不同的字符集,因此,美国机器上的“A”是俄罗斯机器上的西里尔字符(比如 Foo)。

因此不能信任字符常量。感谢现在的现代电脑厂商,机器中的大部分字符集都是一样的,信息交换更简单了。

于 2013-01-17T18:06:41.860 回答
1

C 区分源字符集和执行字符集,因为您的编译器可能是交叉编译器,例如在移动平台的 PC 上。那么计算机上的字符集和目标机器上的字符集一定不能一致。最简单的例子是 EOL 编码,它在当今市场上不同的常见平台之间是不同的。执行字符集还可能取决于“区域设置”和其他由运行程序的用户动态设置的旋钮。

于 2013-01-17T17:35:09.220 回答
0

在 C 语言术语中,数据针对特定的语言环境进行编码,并且语言环境声明字符集。程序有一个执行字符集。编译到程序中的文本(字符串和字符常量)将在该执行字符集中表示。程序本身可以将它从任何语言环境的字符集读取的文本转换为它自己的执行字符集,并根据任何语言环境的字符集来格式化它生成的文本。

“执行时机器的字符集”措辞不好,它暗示不存在或不真实的事物。

于 2013-01-17T20:08:06.643 回答