如何找到无意中的对象指针比较?

时间:2012-12-05 19:40:28

标签: objective-c ios llvm compiler-warnings

快速提问 - 是否有一种很好的方法可以找到==与对象而不是isEqual:的用途?

全文:

我有一堆像这样的代码:

typedef long DataKey;

DataKey x;
DataKey y;

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

我现在需要使用long替换我的DataKey对象。在创建了类并进行了一系列全局搜索和替换之后,我的代码就像这样:

@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==方法,并在尝试使用该运算符时获得一些编译器警告/错误。我可以发布另一个关注此选项的问题。

1 个答案:

答案 0 :(得分:2)

我很确定没有这样的警告,因为比较指针的相等性是非常常见的,而不是所有通常都是错误的。不幸的是,你最好的选择是通过这个方式使用DataKeys并搜索==。我知道,这不是很有趣。