char
在iOS上默认是有符号的还是无符号的?
(我认为这应该是一个常见的问题,但很奇怪地,谷歌没有提供任何有用的信息!)
在大多数情况下,char
在ARM上是无符号的(出于性能原因),而在其他平台上是有符号的。
iOS与ARM的正常惯例不同,默认情况下char
是带符号的。 (特别是与Android不同,在ndk中编译的代码默认为无符号字符。)
这可以在Xcode中更改,有一个名为'char' Type is unsigned
的选项(默认为关闭)。如果将其更改为“是”,Xcode将传递-funsigned-char
给LLVM。(在Xcode 5.0.2上进行了检查)
iOS为什么不同,在iOS ABI函数调用指南: ARM64函数调用约定中提到了原因,其中简单地说明:
在iOS中,与其他达尔文平台一样,
char
和wchar_t
都是带符号类型。
为什么你不尝试一下呢?
char x,y;
x=y=0x7F;
x++;
if(x>y) unsigned else signed...
char
定义为无符号类型;这就是为什么常规工具链这样做的原因。EABI做了很多愚蠢的事情,但它是ARM的“标准”,而在EABI出现之前存在的不兼容ABI混合体,每个都有自己的瑕疵,可能比我们现在被困在其中的EABI更糟糕。 - R.. GitHub STOP HELPING ICEchar
类型为无符号的主要原因是,无符号的char
类型在ARM处理器上可以更快地执行代码,因为ARM的字节级加载和存储指令使用无符号值(不进行符号扩展)。 - ouahchar
经常用于二进制字节操作和字符串中表示字符。 - user529758