在方法调用中返回long long时出现意外结果

时间:2010-01-06 07:21:55

标签: iphone objective-c

当我从方法调用中传回一个long long值时,我遇到了一个奇怪的事情。在我的应用程序中,我已经解决了这个问题,但我很想知道为什么会这样。

当我有一个定义的方法时,有人可以向我解释:

- (long long)testLong {
    NSString* longString = @"100000133597162";
    long long retval = [longString longLongValue];
    NSLog(@"retval:%lld",retval);
    return retval;
}

我按这样调用方法:

long long test = [self testLong];
NSLog(@"test:%lld",test);

结果是:

retval:100000133597162
test:410044394

这对我来说似乎很奇怪。在方法内部打印出正确的值。但是,一旦超出方法,它似乎是一个完全不同的价值。我已经逐步使用调试器,它揭示了同样的事情 - 两个不同的值。我似乎无法解释它。任何人吗?

1 个答案:

答案 0 :(得分:4)

这不是“完全不同的价值”; 410044394100000133597162的低32位。您几乎可以肯定地忽略了包含头文件,或者将该方法声明为在某处返回longint

如果你的调用函数无法弄清楚正确的返回类型是什么,它将假设它是类型id,它在iPhone上是32位宽,这将产生你的截断“看到这里。

同样,如果你的调用函数有一个原型,它在iPhone上声明返回类型为32位宽(如longint),你会看到相同的截断效果。 / p>