Czy istnieje sposób na pominięcie ostrzeżeń w Xcode?
Na przykład wywołuję nieudokumentowaną metodę, a ponieważ metody nie ma w nagłówku, pojawia się ostrzeżenie przy kompilacji. Wiem, że mogę dodać go do mojego nagłówka, aby zatrzymać ostrzeżenie, ale zastanawiam się, czy istnieje sposób inny niż dodanie go do nagłówka (dzięki czemu mogę zachować czyste i standardowe nagłówki), aby wyłączyć ostrzeżenie? Pragma czy coś?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
źródło
źródło
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
Odpowiedzi:
Aby wyłączyć ostrzeżenia dla poszczególnych plików, używając Xcode 3 i llvm-gcc-4.2, możesz użyć:
Gdzie nazwa ostrzeżenia to jakaś flaga ostrzegawcza gcc.
To przesłania wszelkie flagi ostrzegawcze w wierszu poleceń. Jednak nie działa ze wszystkimi ostrzeżeniami. Dodaj -fdiagnostics-show-option do swoich CFLAGS i zobaczysz, której flagi możesz użyć, aby wyłączyć to ostrzeżenie.
źródło
#pragma GCC diagnostic ignored "-Wwarning-flag"
to, że jest już usuniętywarning-flag
je jednym z ostrzeżeń wymienionych na gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlistnieje prostszy sposób na pominięcie ostrzeżeń o nieużywanych zmiennych :
EDYCJA: źródło: http://www.cocoadev.com/index.pl?XCodePragmas
AKTUALIZACJA: Przyszedłem do nowego rozwiązania, solidniejszego
User-Defined
: znajdź (lub utwórz, jeśli go nie znajdziesz) klucz:GCC_WARN_UNUSED_VARIABLE
ustaw go naNO
.Przykład EDIT-2:
kompilator wyświetla ostrzeżenie o nieużywanych zmiennych dla
ok
.Rozwiązanie:
PS: Możesz także ustawić / zresetować inne ostrzeżenie
GCC_WARN_ABOUT_RETURN_TYPE
::YES/NO
źródło
W przypadku gcc możesz użyć
Możesz dowiedzieć się o pragmie GCC tutaj i aby uzyskać kod ostrzegawczy ostrzeżenia, przejdź do Nawigatora raportów (Polecenie + 9), wybierz najwyższą kompilację, rozwiń dziennik (przycisk „=” po prawej stronie) i przewiń do na dole i tam twój kod ostrzegawczy jest w takich nawiasach kwadratowych
[-Wshadow-ivar]
Do brzęku możesz użyć
źródło
Aby usunąć ostrzeżenie dotyczące pojedynczego pliku, wykonaj następujące czynności:
wybierz plik w projekcie xcode. naciśnij get info przejdź do strony z opcjami budowania wpisz -Wno-, aby zanegować ostrzeżenie:
na przykład
Możesz uzyskać nazwę ostrzeżenia, jeśli spojrzysz na ustawienia projektu, spójrz na ostrzeżenia GCC znajdujące się na dole strony zakładki kompilacji, klikając każde ostrzeżenie, a zobaczysz nazwę parametru ostrzeżenia:
na przykład
źródło
...m:45:69: Incompatible pointer types sending...
otworzyłem wyjaśnienie kompilacji i znalazłem to ostrzeżenie:[-Wincompatible-pointer-types]
właśnie zmieniłem nazwę na-Wno-incompatible-pointer-types
i dodałem jako flagę do mojego.m
pliku ... bum, nie ma więcej ostrzeżeń ... +10 jeśli mógłbymW przypadku Objective-C szereg poważnych błędów pojawia się tylko jako ostrzeżenia. Nie tylko nigdy nie wyłączam ostrzeżeń, ale zwykle włączam opcję „Traktuj ostrzeżenia jako błędy” (-Werror).
Każdego typu ostrzeżenia w kodzie można uniknąć, wykonując czynności poprawnie (zwykle rzutując obiekty na właściwy typ) lub deklarując prototypy, gdy ich potrzebujesz.
źródło
Aby pozbyć się ostrzeżenia: spróbuj utworzyć interfejs kategorii dla danego obiektu
Na marginesie, zdecydowanie odradzam wywoływanie nieudokumentowanych metod w kodzie wysyłkowym. Interfejs może się zmieniać i będzie się zmieniać, a to będzie Twoja wina.
źródło
http://nshipster.com/pragma/#inhibiting-warnings - przejdź do sekcji ostrzeżeń hamujących
źródło
Utwórz nowy, oddzielny plik nagłówkowy o nazwie „Undocumented.h” i dodaj go do swojego projektu. Następnie utwórz jeden blok interfejsu dla każdej klasy, dla której chcesz wywołać funkcje nieudokumentowane, i nadaj każdej kategorii „(Nieudokumentowane)”. Następnie po prostu dołącz ten jeden plik nagłówkowy do swojego PCH. W ten sposób oryginalne pliki nagłówkowe pozostają czyste, jest tylko jeden inny plik do utrzymania i możesz zakomentować jedną linię w swoim PCH, aby ponownie włączyć wszystkie ostrzeżenia.
Używam tej metody również do amortyzowanych funkcji w „Amortyzowane.h” z kategorią „(Amortyzowane)”.
najlepsze jest to, że możesz selektywnie włączać / wyłączać poszczególne ostrzeżenia, komentując lub usuwając komentarze z poszczególnych prototypów.
źródło
Zniesienie tego konkretnego ostrzeżenia nie jest bezpieczne. Kompilator musi znać typy argumentów i powrócić do metody, aby wygenerować poprawny kod.
Na przykład, jeśli wywołujesz taką metodę
[foo doSomethingWithFloat: 1.0];
który przyjmuje wartość zmiennoprzecinkową i nie ma widocznego prototypu, kompilator zgadnie, że metoda przyjmuje wartość typu double, a nie float. Może to spowodować awarie i nieprawidłową interpretację wartości. W powyższym przykładzie, na małej maszynie endian, takiej jak maszyny Intel, metoda odbiornika zobaczy 0, a nie 1.
Możesz przeczytać, dlaczego w dokumentacji i386 ABI , lub możesz po prostu poprawić swoje ostrzeżenia. :-)
źródło