5

快速提问 - 有没有一种很好的方法来找到==with objects 而不是 的用途isEqual:

全文:

我有一堆这样的代码:

typedef long DataKey;

DataKey x;
DataKey y;

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

我现在需要用一个对象替换使用 a longfor my 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==方法以及在尝试使用该运算符时获得一些编译器警告/错误的组合。我可能会发布另一个关于此选项的问题。

4

1 回答 1

2

I'm pretty sure there is no such warning, as comparing pointers for equality is pretty common and not all that commonly done in error. Your best bet will unfortunately be to go through any place DataKeys might be used this way and search for ==. Not very fun, I know.

于 2012-12-05T21:21:32.673 回答