2013-12-13 55 views

回答

9

在大多數情況下,char是無符號的ARM(用於performance reasons)和其他平臺上的簽署。

iOS與ARM的常規約定不同,默認情況下char是帶符號的。 (特別是與Android不同,where code compiled in the ndk defaults to unsigned char。)

這可以在xcode中更改,有一個'char' Type is unsigned選項(默認爲關閉)。如果更改爲「是」,xcode將通過-funsigned-char到llvm。 (經過上的Xcode 5.0.2)

之所以iOS版的不同之處iOS ABI Function Call Guide: ARM64 Function Calling Conventions被提及,這只是說:

在iOS系統中,與其它達爾文的平臺,無論是char和wchar_t的是 符號類型。

+0

我不知道ARM工具鏈默認爲'unsigned char'! :o感謝分享! – 2013-12-13 21:30:29

+1

ARM EABI將'char'定義爲無符號;這就是普通工具鏈這樣做的原因。 EABI做了很多愚蠢的事情,但這是ARM的「標準」,而且在EABI出現之前存在的各自具有破綻的不兼容ABI的混合可能比我們現在堅持的EABI更糟糕。 –

+2

在EABI中char'無符號的主要原因是無符號的'char'類型允許ARM上的代碼更快,因爲ARM加載和存儲指令的字節使用無符號值(無符號擴展名)。 – ouah

0

你爲什麼不試試呢?

char x,y; 

x=y=0x7F; 
x++; 
if(x>y) unsigned else signed...