字符常量的C编码

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

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

强调最后3个字。

任何人都可以解释为什么他们会说“在执行时”。 当然,字符值是以编译后的二进制(或ELF,A.OUT ...)编码的?

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


你将不得不告诉编译器你要在哪个系统上运行该程序。 然后它会选择适当的字符编码。

当然,默认情况下是在类似于运行编译器的系统上运行。 在这种情况下,编译时和运行时字符集将是相同的。


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


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

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

因此字符常量不能被信任。 由于现在的计算机制造商现在,机器中的大多数字符集都是相同的,并且信息交换更简单。

链接地址: http://www.djcxy.com/p/11729.html

上一篇: C encoding of character constants

下一篇: How to handle a system alert message for iOS?