wor*_*aby 3 casting objective-c nsstring
我在gdb中测试了这个表达式:
(gdb) p (int)[@"-1" floatValue]
$2 = 1
Run Code Online (Sandbox Code Playgroud)
但
(gdb) p (int)((float)[@"-1" floatValue])
$7 = -1
Run Code Online (Sandbox Code Playgroud)
按照我的预期出来
为什么第一个表达式不返回-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)')
Run Code Online (Sandbox Code Playgroud)
将表达式转换int为时,gdb假定该方法返回一个int.所以它知道它可以objc_msgSend用来发送消息并将返回值objc_msgSend视为一个int.
将表达式转换为a时float,gdb假定该方法返回a float.所以它知道它应该objc_msgSend_fpret用来发送消息并将返回值视为浮点数.
这很重要,因为:
在i386平台上,返回浮点值的函数的ABI与返回整数类型的函数的ABI不兼容.因此,在i386平台上,必须使用objc_msgSend_fpret作为函数[sic]返回非整数类型的函数.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |