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
для функций, которые для функций [sic] возвращают нецелый тип.