我正在从 Objective C 调用 C++ 方法。我需要传递一个浮点值作为参数。这是代码:
C++ 方法:
void printValue(float a){
NSLog(@"Value of a: %5.2f",a); // I am using NSLog here. It works
}
我在 C++ 文件中有指令 extern "C"。也为 c++ 文件使用 .mm 扩展名
我从 Objective C 类调用这个方法是这样的:
printValue(3.1); // 3.1 is a sample value
我得到 a 的值:0.00
。如果我将 (float a)
更改为 (double a)
,我会得到正确的值 3.10。
我尝试在调用时将值转换为 float :
printValue((float)3.1);
这也给出了 0.00
我该如何解释呢?
最佳答案
C 的调用约定表明,当将参数传递给可变参数函数(类似于 NSLog 的函数,在参数列表末尾带有 ...)时,每个 float
都必须转换并作为双
。
我希望 C++ 不是这种情况(但我真的不知道)。无论如何,因为 NSLog
期望所有浮点类型都是 double 的,所以明确地进行转换是最安全的:
NSLog(@"Value of a: %5.2f", (double)a);
另一个想法:如果编译器说一些关于 NSLog
的函数声明缺失问题也可能是它没有按照可变参数,因为它看不到函数的声明。
关于c++ - 将浮点值从 Objective-C 传递到 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481480/