2012-12-05 49 views
5

快速的問題 - 有沒有一種很好的方法來找到==用於物體而不是isEqual:的用法?如何找到意外的對象指針比較?

全文:

我有一堆的代碼有點像這樣:

typedef long DataKey; 

DataKey x; 
DataKey y; 

if (x == y) { 
    // do stuff 
} 

我現在有必要使用longDataKey與對象進行替換。創建類,做了一堆全局搜索和替換之後,我的代碼現在是一種像這樣:

@interface DataKey : NSObject 

DataKey *x; 
DataKey *y; 

if (x == y) { // uh-oh - this is now bad 
    // do stuff 
} 

有一個警告,我可以在發出警告的指針採用標量運算符的編譯器能?我正在使用Xcode 4.5.2和LLVM 4.1編譯器。我一直無法找到一個。

還有其他一些可幫助修復所有這些代碼的建議嗎?這不是一個簡單的代碼庫。有數百個源文件需要處理。這是一個重大的重大努力。

編輯:

這將是巨大的,如果有一個警告,當您在if條件,而不是比較使用賦值很像。您可以爲此發出警告並使用括號來停止警告。

更新:根據在意見建議

,我添加了-Weverything編譯器選項的測試項目。當將兩個對象指針與==進行比較時,這不會產生任何期望的結果。

也許C++的組合,重載operator==方法,並嘗試使用該操作符時得到一些編譯器警告/錯誤可以實現。我可能會發布另一個關於這個選項的問題。

+0

好問題。 [檢查它是否是一個有效的指針](http://www.cocoawithlove.com/2010/10/testing-if-arbitrary-pointer-is-valid.html),然後將自定義編譯器警告添加爲'#警告一些文本'。不確定那是你在找什麼。 – iDev

+0

@ACB我不知道如何在這裏應用該鏈接的信息。我正在尋找(理想情況下)編譯時檢查。該鏈接用於運行時檢查。 – rmaddy

+0

這將是一個合理的編譯器選項,但我從來沒有見過這樣的,我不能不顧手中的任何宏觀技巧或任何強制錯誤。 –

回答

2

我敢肯定,沒有這樣的警告,因爲比較指針的平等是相當普遍的,而不是所有的錯誤。不幸的是,您最好的選擇是通過任何地方DataKeys可能會以這種方式使用並搜索==。我知道不是很有趣。

+3

基於SO上的新手問題數量,他們試圖用'=='來比較兩個'NSString'對象,我不得不不同意用錯誤==不常見。我敢打賭,這是常見的,因爲意外地在條件中使用賦值而不是比較,並且有編譯器支持這個問題。 – rmaddy

+2

@rmaddy:我想Chuck意思是比較指針是否平等也很常見;而條件陳述中的分配通常是錯誤的。 – mipadi

+0

@mipadi我在說我不同意比較平等的指針是常見的。至少在我自己的代碼中,這是非常罕見的。我總是添加一條評論來清楚說明我真的打算用'=='進行比較。事實上,在近20萬行代碼中,我只做了一次。我毫不懷疑,其他人更經常這樣做。 – rmaddy