我測試在gdb這個表達式:爲什麼(INT)@ 「 - 1」 的floatValue]不返回-1
(gdb) p (int)[@"-1" floatValue]
$2 = 1
但
(gdb) p (int)((float)[@"-1" floatValue])
$7 = -1
出來,因爲我希望
爲什麼第一個表達式不返回-1
?另外,什麼是[@"-1" floatValue]
的返回類型?
我測試在gdb這個表達式:爲什麼(INT)@ 「 - 1」 的floatValue]不返回-1
(gdb) p (int)[@"-1" floatValue]
$2 = 1
但
(gdb) p (int)((float)[@"-1" floatValue])
$7 = -1
出來,因爲我希望
爲什麼第一個表達式不返回-1
?另外,什麼是[@"-1" floatValue]
的返回類型?
GDB不知道的方法(或功能)的返回類型:
(gdb) p [@"-1" floatValue]
Unable to call function "objc_msgSend" at 0x155d08c: no return type information available.
To call this function anyway, you can cast the return type explicitly (e.g. 'print (float) fabs (3.0)')
當你施放的表達,int
,GDB假定該方法返回一個int
。所以它知道它可以使用objc_msgSend
來發送消息並將objc_msgSend
的返回值視爲int
。
當您將表達式轉換爲float
時,gdb會假定該方法返回float
。所以它知道它應該使用objc_msgSend_fpret
發送消息並將返回值視爲浮點數。
這是重要的,因爲:
在i386平臺中,ABI返回浮點 值的函數是用於返回一個組成 型功能不兼容。因此,在i386平臺上,您必須使用objc_msgSend_fpret 作爲函數[返回非整數類型]的函數。
我不知道這是否正確,但它至少_sounds_智能和令人信服:-) – paxdiablo
我重寫它使其更清晰(我希望)。 –
我寫了一些代碼來測試結果 int d = [@「 - 1」floatValue]; float f = [@「 - 1」floatValue]; NSLog(@「%d,%f」,d,f); 結果是-1,這是正確的。所以這是gdb的問題,用[@「 - 1」floatValue]的值處理; –