2009-12-16 90 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