Szybkie pytanie - czy istnieje dobry sposób na znalezienie zastosowań ==
z obiektami zamiast isEqual:
?Jak znaleźć nieumyślne porównania wskaźnika obiektu?
Pełna historia:
miałem kilka kodu rodzaju jak ten:
typedef long DataKey;
DataKey x;
DataKey y;
if (x == y) {
// do stuff
}
Mam teraz potrzebę zastąpienia używając long
dla mojego DataKey
z obiektem. Po utworzeniu klasy i robi kilka globalnego wyszukiwania i zastąpić mój kod teraz jest trochę tak:
@interface DataKey : NSObject
DataKey *x;
DataKey *y;
if (x == y) { // uh-oh - this is now bad
// do stuff
}
Czy istnieje ostrzeżenie mogę włączyć w kompilator, który ostrzega o użyciu skalarnych operatorów w wskaźnikami? Używam Xcode 4.5.2 z kompilatorem LLVM 4.1. Nie byłem w stanie go znaleźć.
Jakieś inne sugestie, które pomogą naprawić ten kod? To nie jest trywialna podstawa kodu. Istnieją setki plików źródłowych do rozwiązania. Jest to główny wysiłek związany z refaktoryzacją.
Edit:
Byłoby wspaniale, gdyby nie było ostrzeżenie podobnie jak podczas korzystania zadanie w if
stanie zamiast porównania. Możesz otrzymać ostrzeżenie i użyć nawiasów, aby zatrzymać ostrzeżenie.
Aktualizacja:
oparciu o sugestie w komentarzach, dodałem opcję -Weverything
kompilator projektu badawczego. Nie przyniosło to pożądanego rezultatu przy porównywaniu dwóch wskaźników obiektów z ==
.
Możliwe, że można uzyskać połączenie C++, przeciążenie metody operator==
i uzyskanie ostrzeżenia/błędu kompilatora podczas próby użycia tego operatora. Mogę opublikować kolejne pytanie dotyczące tej opcji.
Dobre pytanie. Jak o [sprawdzanie, czy jest to prawidłowy wskaźnik] (http://www.cocoawithlove.com/2010/10/testing-if-arbitrary-pointer-is-valid.html), a następnie dodanie niestandardowego ostrzeżenia kompilatora jako '# ostrzeżenie niektórych tekstu ". Nie masz pewności, że tego właśnie szukasz. – iDev
@ACB Nie jestem pewien, w jaki sposób informacje z tego łącza mogą być stosowane tutaj. Szukam (najlepiej) sprawdzenia czasu kompilacji. Ten link służy do sprawdzania czasu wykonywania. – rmaddy
Byłoby to rozsądną opcją kompilatora, ale nigdy takiego nie widziałem i nie mogę od razu pomyśleć o jakiejkolwiek makrowej sztuczce lub czymkolwiek, by wymusić błędy. –