[英]Passing float values from objective C to C++ methods
我正在从Objective C调用C ++方法。我需要传递一个float值作为参数。 这是代码:
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的Value of a: 0.00
。 如果我将(float a)
更改为(double a)
,则得到正确的值3.10。
我尝试在调用时将值强制转换为浮点型:
printValue((float)3.1);
这也给0.00
我该怎么解释?
C的调用约定说,将参数传递给可变参数函数(参数列表末尾带有...的NSLog之类的函数)时,每个float
必须转换为double
并传递。
我希望C ++并非如此(但我真的不知道)。 无论如何,由于NSLog
期望所有浮点类型都是double,因此显式进行转换是最安全的:
NSLog(@"Value of a: %5.2f", (double)a);
另一个想法:如果编译器说了关于NSLog
的缺少函数声明的问题,则问题可能还在于它没有执行转换,以可变参数表示的预期double
,因为它看不到函数的声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.