iOS双方法参数失败

时间:2012-09-05 09:21:41

标签: objective-c ios c

我有一些框架代码可以做到这一点:

#ifdef USE_DOUBLE
typedef double real;
#else
typedef float real;
#endif

但是当USE_DOUBLE 定义(如此真实==双重)时,我试图使用此类型,如下所示:

- (id) initSomeObject:(real)arg  andSomeOtherStuff:(id)thing
{
    self = [super init];
    if (self)
    {
        field = arg;
    }
}

[someObject initSomeObject:2.0  andSomeOtherStuff:nil];

arg值完全被删除,显示为5.3 ... e-315。 ,如果我关闭USE_DOUBLE 关闭2.0的值就会完美无缺。这是在最新的iOS 5+,在iPhone 4上使用Xcode 4.3.3和LLVM 3.1。iOS不能很好地处理双打吗?我的USE_DOUBLE标志是否总是不合格?

1 个答案:

答案 0 :(得分:0)

定义USE_DOUBLE和类型real是在我的应用程序使用的静态库中定义的。事实证明USE_DOUBLE需要设置为框架中的相同值,并且客户端应用程序中的typedef正常工作。似乎我的应用程序被认为是一个单独的编译单元,这意味着它没有定义USE_DOUBLEreal是一个浮点数。这导致运行时缩小了我的值的精度并导致意外/未定义的行为。将#define USE_DOUBLE添加到我的应用程序项目中似乎已经解决了这个问题。