我测试在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]的值处理; –