2011-11-03 82 views
3

我测试在gdb这个表达式:为什么(INT)@ “ - 1” 的floatValue]不返回-1

(gdb) p (int)[@"-1" floatValue] 
$2 = 1 

(gdb) p (int)((float)[@"-1" floatValue]) 
$7 = -1 

出来,因为我希望

为什么第一个表达式不返回-1?另外,什么是[@"-1" floatValue]的返回类型?

+0

我写了一些代码来测试结果 int d = [@“ - 1”floatValue]; float f = [@“ - 1”floatValue]; NSLog(@“%d,%f”,d,f); 结果是-1,这是正确的。所以这是gdb的问题,用[@“ - 1”floatValue]的值处理; –

回答

6

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 作为函数[返回非整数类型]的函数。

+3

我不知道这是否正确,但它至少_sounds_智能和令人信服:-) – paxdiablo

+0

我重写它使其更清晰(我希望)。 –