2

このコンパイラの警告が表示されました:

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

2つのエンティティを比較しようとすると:

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;
          }
        }

この警告の最終的な原因とその修正方法を教えてください。

4

1 に答える 1

3

質問への直接の答えでは、2つの関数ポインターのアドレスを比較しようとすると、関数ポインター警告の順序付き比較が生成されます。ほとんどの場合、メモリ内の2つの関数の位置を比較する価値がほとんどないため、この比較は誤りです。

ここではそうである場合とそうでない場合がありますが、関数ポインターを直接比較できるようにする必要がある場合は、警告を明示的にオフにする必要があります(このためのコンパイラー・オプションがある場合は見つかりませんでした)または、void*などの比較をサポートする値に2つのポインターをキャストします。

于 2012-06-05T09:52:39.630 に答える