4

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

#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完美。这是在 iPhone 4 上使用 Xcode 4.3.3 和 LLVM 3.1 的最新 iOS 5+ 上。iOS 不能很好地处理双打吗?我的USE_DOUBLE标志是否应该始终未定义?

4

1 回答 1

0

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

于 2012-09-05T18:21:05.537 回答