X86与ARM上C中指针和整数的比较

1 c gcc arm

在我的节目,我比较反对的十六进制字符INT和我得到不同的结果在X86 PC和ARM的掌上电脑,与N900 ARM-GCC或本地的gcc,无论哪种方式,条件是PC真实,不通过移动编译运行.

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

      return 0;
}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 5

与实际角色常数进行比较可能更为明智.虽然整数促销仍会发生在两个操作数上==,但至少它们会以相同的方式发生,并且你不会依赖于charint或你的大小的签名unsigned int.

例如

if (*argv[1] == '\xcc')
Run Code Online (Sandbox Code Playgroud)

我相信ARM编译器通常使用char无符号,这意味着当'\xcc'提升为一个整数时,你得到的值0xcc不是0xffffffcc.


oua*_*uah 5

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

随着gcc音符,你可以改变类型的默认char使用的选项-fsigned-char-funsigned-char.