【问题标题】:K&R C handling the octalsK&R C 处理八进制
【发布时间】:2013-11-22 23:01:18
【问题描述】:

所以,首先我阅读了以下内容: 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

八进制数字系统,简称oct,是以8为基数的数字系统,使用数字0到7。

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

【问题讨论】:

标签: c octal kernighan-and-ritchie


【解决方案1】:

K&R C 不是很严格,所以很多 ANSI-C(和更新的)编译器不允许的东西都是允许的。

“八进制”数字0193 将等同于1*8^2 + 9*8^1 + 3。憎恶?是的。

【讨论】:

  • 是的,很明显它是一个实现工件。对于另一个类似的,在一些旧的 K&R C 编译器中查找两个不同的结构不能具有同名的成员字段的原因。
【解决方案2】:

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

K&R C 是 1978 年第一版的 Kernighan 和 Ritchie 的“C 编程语言”中描述的(基本上已经过时的)语言,它允许 8 和 9 为八进制数,明显的值分别为 8 和 9。

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

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多