“函数指针的有序比较”警告意味着什么?

时间:2012-06-05 08:19:15

标签: objective-c ios

我收到了这个编译器警告:

Ordered comparison of function pointers ('IMP' (aka 'id(*)(id,SEL,...)')and "IMP")

当我尝试比较两个实体时:

for (i = 0; k < 30; k++) {
        IMP imp = getValue(class_method[i]);
        if (imp <= (IMP)currDesc->address) {//this is the line causing the warning
          size_t diff = (size_t)classMap->address - (size_t)imp;
          if (diff < mediumSize) {
            best_method = class_method[i];
            is_class_method = YES;
            mediumSize = diff;
          }
        }

请您解释一下此警告的最终原因以及如何解决此问题。

1 个答案:

答案 0 :(得分:3)

在直接回答问题时,当您尝试比较两个函数指针的地址时,会生成函数指针警告的有序比较。在大多数情况下,这种比较是错误的,因为比较内存中两个函数的位置几乎没有价值。

这可能是也可能不是这种情况,但是如果你需要让函数指针可以直接比较,你需要明确地关闭警告(我找不到编译器选项,如果有的话是一个)或将两个指针转换为支持比较的值,例如void *。