2009-12-16 88 views
0

下面的代码编译正常...CLANG Pass-By-Value Warning?

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    // VARIABLES 
    MDD *MDD_structure; 
    NSString *mddFile = @"/Users/Gary/Code/Mdd/xTest.mdd"; 
    NSFileHandle *inFile; 
    NSData *inBuffer; 
    int MDD_fCount; 
    int MDD_vCount; 

    // OPEN FILE ON DISK 
    inFile = [NSFileHandle fileHandleForReadingAtPath:mddFile]; 
    if(inFile == nil) NSLog(@"FILE: Open ... ERROR"); 
    else NSLog(@"FILE: Open ... OK"); 

    // READ FRAME COUNT 
    inBuffer = [inFile readDataOfLength:sizeof(int)]; 
    [inBuffer getBytes:&MDD_fCount length:sizeof(int)]; 
    MDD_fCount = CFSwapInt32BigToHost(MDD_fCount); 
    NSLog(@"FC: %d", MDD_fCount); 

但是当我通过静态分析仪“CLANG LLVM 1.0”来运行它,我得到以下...

warning: Pass-by-value argument in function call is undefined. 
     MDD_fCount = CFSwapInt32BigToHost(MDD_fCount); 
        ^     ~~~~~~~~~~ 
1 diagnostic generated. 

谁能告诉我是什么我失踪了?

加里

+0

应该知道,非常感谢您的高举。 – fuzzygoat 2009-12-16 16:55:36

回答

5

因为铛不相信只是你的变量的地址传递给一个函数是一样的给它一个值你得到一个错误。你可能初始化MDD_fCount为0开始摆脱错误。

+0

我刚才看到这个,在调用之前MDD_fCount确实有一个值,它从NSData对象获得32个字节。难道这只是CLANG缺少一个事实,即我通过它的地址直接给MDD_fCount一个值,而不是通过赋值? – fuzzygoat 2009-12-16 17:11:57

+1

这就是我所说的 - clang没有办法知道“将变量的地址传递给函数”最终会初始化它。它不能静态验证'-getBytes:length:'实际上会完全填充它的参数。 – 2009-12-16 18:18:06

3

这意味着你还没有初始化MDD_fCount。有关其他信息,请参阅this blog postthis other question

+0

谢谢,应该知道,尤其是其他问题是由我...我会在我的显示器上记下以备将来参考。 – fuzzygoat 2009-12-16 16:57:32