【问题标题】:Assignment EOF of int to char behavior on ARM vs x86_64在 ARM 与 x86_64 上将 int 的 EOF 分配给 char 行为
【发布时间】:2019-04-12 06:27:33
【问题描述】:

我在 ARM (iMX6) 和 intel 64 位上运行这个 sn-p 代码:

#include <stdio.h>


int main()
{
    int i = EOF;
    char d = i;

    printf("i = %d, d = %d\n", i, d);

    if (i == EOF)
        printf ("i is EOF\n");
    if (d == EOF)
        printf ("d is EOF\n");

    return 0;
}

在这两种情况下,我都使用 gcc 5.4 编译它: ARM:gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 x86_64: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

但是,结果却大不相同:

手臂:

i = -1, d = 255
i is EOF

x86_64:

i = -1, d = -1
i is EOF
d is EOF

为什么会这样?

【问题讨论】:

    标签: casting char int variable-assignment eof


    【解决方案1】:

    char 是带符号的(即范围从 -128 到 127)还是无符号的(范围从 0 到 255)是实现定义的。

    • 在您的 ARMgcc 组合中,它显然是无符号的。 因此 -1 转换为 255。

    • x86_64gcc 的组合中,它已签名。因此,-1 是 保留。

    【讨论】:

    • 是的,我的错。我以某种方式认为 char 已在每个架构上签名......
    猜你喜欢
    • 2012-12-10
    • 2018-02-03
    • 2021-12-17
    • 2013-10-15
    • 2023-03-26
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多