2012-10-08 56 views
0

在我的Xcode項目我做了下面的C效用函數一個獨立的頭文件:導入頭文件與Objective-C的C函數多次

#ifndef FOO 
#define FOO 
CGFloat DistanceBetweenTwoPoints(CGPoint p1, CGPoint p2) 
{ 
    CGFloat dx = p2.x - p1.x; 
    CGFloat dy = p2.y - p1.y; 
    return sqrt(dx*dx + dy*dy); 
}; 
#endif 

即使預處理指令,如果我嘗試importinclude,在多個地點頭文件,我收到以下錯誤抱怨重複的符號:

linker command failed with exit code 1 

是否有不同的方式,我可以達到這個效果?這個問題比其他任何事情都好奇。

感謝

回答

1

把你的函數體在.c文件和.h#ifndef函數聲明(又稱原型)等,然後使用include導入你需要的功能的頭文件。

請記住檢查.c文件的目標成員資格,否則將不會被編譯。

對於這樣一個小功能,你可以將它聲明inline,只是使用頭文件:

inline CGFloat DistanceBetweenTwoPoints(CGPoint p1, CGPoint p2) 
{ 
    // code as is 
} 

編譯器將取代的功能與功能代碼調用,而實際構建和鏈接的新對象文件。沒有更多重複的符號。

1

由於函數的定義是在頭,你在它被包含的每個文件(實際上,每個翻譯單元)功能的一個定義。

將函數體移到「.c」文件中,在頭中留下聲明,或聲明它爲inline