c++ - 将浮点值从 Objective-C 传递到 C++ 方法

标签 c++ ios objective-c

我正在从 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/

相关文章:

c++ - octave 独立,示例报告对 `octave::feval 错误的 undefined reference

ios - 从大照片生成图 block (iOS PhotoScroller)

ios - Swift 委托(delegate)不调用父函数

ios - iOS 上的 VLCKit 在播放流媒体时没有 fps

IOS发送post方法数据可以在php中作为get方法访问

iphone - startDownloadingUbiquitousItemAtURL 本地文件路径?

c++ - 退出简单的 while 循环时遇到问题

c++ - 为什么地址运算符 ('&' ) 可以与在 C++ 中使用寄存器存储类说明符声明的对象一起使用?

ios - 以编程方式创建的 UISplitViewController 没有滑动手势来显示/隐藏 master

c++ - 多个视频渲染期间图片颜色错误