1

在我的程序中,我将 char 与十六进制 int 进行比较,我得到了在 X86 PC 和 ARM 手持设备上运行的不同结果,在 n900 上使用 arm-gcc 或本机 gcc 编译,无论哪种方式,PC 的条件都是正确的,而不是在移动设备上传递。

int main(int argc, char *argv[])
{
      if (*argv[1] == 0xffffffcc)
          puts("ok");

      return 0;
}
4

2 回答 2

5

与实际字符常数进行比较可能更明智。尽管整数提升仍然会发生在==的两个操作数上,但至少它们会以相同的方式发生,并且您不会依赖于您的或char大小的符号。intunsigned int

例如

if (*argv[1] == '\xcc')

我相信 ARM 编译器通常会生成char无符号,这意味着当'\xcc'提升为整数时,您会得到值0xcc,而不是0xffffffcc

于 2012-06-24T10:35:45.743 回答
5

在 ARM 系统上,char默认情况下类型通常是无符号的,而在 x86 上通常是有符号的。相等运算符==执行两个操作数的整数提升,因此行为的差异*argv[1]被认为是有符号(执行符号扩展)或无符号(不执行符号扩展)。

gcc请注意,您可以使用char选项-fsigned-char-funsigned-char.

于 2012-06-24T10:42:59.910 回答