K&R C处理八进制数

3
首先,我阅读了以下内容:http://www.hpc.unimelb.edu.au/nec/g1af02e/chap1.html 它告诉我以下内容:

K&R C和SUPER-UX K&R C 允许使用数字8和9。它们被视为十进制整数常量。

我有点困惑...查找了更多资料...发现这个:http://docs.oracle.com/cd/E19205-01/819-5265/bjbfb/index.html 它告诉我这个:

在八进制转义序列中接受8或9。

但是,根据:http://en.wikipedia.org/wiki/Octal

八进制数字系统,简称八进制,是一种基于8的数字系统,使用数字0到7。

现在我真的很困惑。我从来没有机会真正使用过K&R C编译器...所以为什么K&R C接受8和9作为八进制数字...这是如何处理的?在“真正”的八进制系统中它们的值是什么?

这个问题的答案可能会对你有所帮助。请参考这个链接 - 0xF1
2个回答

6

K&R C并不是非常严格,因此许多ANSI-C(和更新版本)编译器不允许的事情是被允许的。

“八进制”数字0193相当于1*8^2 + 9*8^1 + 3。 真是丑陋?是的。


是的,很明显这是一个实现工件。对于另一个类似的问题,请查看为什么一些旧的K&R C编译器中两个不同的结构体不能具有相同名称的成员字段的原因。 - Yuhong Bao

4

自1989年的ANSI C标准以来,在现代C语言中,八进制数字只包括0到7(用于字符和字符串字面量以及整数常量中的八进制转义)。

K&R C是1978年Kernighan和Ritchie所著《C程序设计语言》第一版中描述的(大部分已经过时)语言,允许在八进制数中使用8和9,分别表示8和9这两个数字。

例如,在现代C语言中,常量019是一个语法错误,但在K&R C中它的值为17。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接