在iOS上默认是char签名还是未签名?

Jos*_*phH 6 c arm llvm ios

char在iOS上默认是签名还是未签名?

(我认为这将是一个很好的回答问题,但奇怪的是谷歌没有任何用处!)

Jos*_*phH 12

在大多数情况下,char在ARM上未签名(出于性能原因)并在其他平台上签名.

iOS与ARM的常规约定不同,默认情况下会对char进行签名.(特别是这与Android不同,其中在ndk中编译的代码默认为unsigned char.)

这可以在xcode中更改,有一个'char' Type is unsigned选项(默认为关闭).如果将其更改为"yes",则xcode将传递-funsigned-char给llvm.(检查xcode 5.0.2)

iOS ABI函数调用指南中提到了iOS不同的原因:ARM64函数调用约定,简单地说:

在iOS中,与其他Darwin平台一样,char和wchar_t都是签名类型.

  • 'char`在EABI中无符号的主要原因是无符号`char`类型允许ARM上的代码更快,因为ARM加载和存储的字节指令使用无符号值(无符号扩展). (3认同)
  • @ouah老实说,我发现默认使用unsigned char更合乎逻辑,因为`char`通常用于二进制字节操作和表示字符串中的字符. (2认同)