【发布时间】:2012-12-05 19:40:27
【问题描述】:
快速提问 - 有没有一种好方法可以找到 == 与对象而不是 isEqual: 的用途?
全文:
我有一堆类似这样的代码:
typedef long DataKey;
DataKey x;
DataKey y;
if (x == y) {
// do stuff
}
我现在需要用一个对象替换我的DataKey 的long。创建类并进行大量全局搜索和替换后,我的代码现在是这样的:
@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 条件中使用赋值而不是比较时出现警告,那就太好了。你可以得到一个警告并使用括号来停止警告。
更新:
根据 cmets 中的建议,我将 -Weverything 编译器选项添加到测试项目中。在将两个对象指针与== 进行比较时,这并没有产生任何期望的结果。
也许可以实现 C++ 的组合、重载 operator== 方法以及在尝试使用该运算符时获得一些编译器警告/错误。我可能会发布另一个关于此选项的问题。
【问题讨论】:
-
好问题。 checking if it is a valid pointer 然后添加自定义编译器警告为
#warning some text怎么样。不确定这是您要找的。span> -
@ACB 我不确定如何在此处应用来自该链接的信息。我正在寻找(理想情况下)编译时检查。该链接用于运行时检查。
-
这将是一个合理的编译器选项,但我从未见过这样的,而且我想不出任何宏技巧或任何强制错误的东西。
-
(虽然我想知道你是否可以暂时用一个 C++ 类替换该类,该类会重载
==以一种在编译期间会出错的方式。但不确定你是否可以重载==in C++。) -
嗯,您可以通过文件属性窗口将您的文件的属性临时更改为Ob_C++。根据您的看法,比直接重命名文件更复杂或更简单。
标签: objective-c ios llvm compiler-warnings