5

==簡単な質問 -の代わりに with オブジェクトを使用する良い方法はありisEqual:ますか?

全文:

次のようなコードがたくさんありました。

typedef long DataKey;

DataKey x;
DataKey y;

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

longfor myDataKeyを objectに置き換える必要があります。クラスを作成し、一連のグローバル検索と置換を行った後、私のコードは次のようになります。

@interface DataKey : NSObject

DataKey *x;
DataKey *y;

if (x == y) { // uh-oh - this is now bad
    // do stuff
}

ポインターでのスカラー演算子の使用について警告する、コンパイラーで有効にできる警告はありますか? LLVM 4.1 コンパイラで Xcode 4.5.2 を使用しています。私はそれを見つけることができませんでした。

このコードのすべてを修正するのに役立つ他の提案はありますか? これは単純なコード ベースではありません。扱うべきソースファイルは何百もあります。これは主要なリファクタリング作業です。

編集:

if比較の代わりに条件で代入を使用するときのように、警告があれば素晴らしいでしょう。これに対して警告が表示され、括弧を使用して警告を停止できます。

アップデート:

コメントの提案に基づいて、-Weverythingコンパイラ オプションをテスト プロジェクトに追加しました。これにより、2 つのオブジェクト ポインタを で比較したときに、望ましい結果が得られませんでした==

おそらく、C++、operator==メソッドのオーバーロード、およびその演算子を使用しようとしたときにコンパイラの警告/エラーを取得することの組み合わせを実現できます。このオプションに焦点を当てた別の質問を投稿することがあります。

4

1 に答える 1

2

ポインターが等しいかどうかを比較することは非常に一般的であり、一般的にエラーで行われるわけではないため、そのような警告はないと確信しています。残念ながら、最善の策は、DataKey がこのように使用される可能性があるすべての場所を調べて、== を検索することです。あまり楽しくない、私は知っています。

于 2012-12-05T21:21:32.673 に答える