2016-06-29 57 views
5

Jaki jest prawidłowy sposób blokowania niewykorzystanego ostrzeżenia funkcji Xcode dla funkcji w nagłówku biblioteki?Prawidłowy sposób blokowania niewykorzystanego ostrzeżenia funkcji Xcode dla wbudowanych funkcji w nagłówku biblioteki.

Na przykład, mam następującą funkcję zdefiniowane w MathUtils.h:

namespace MathUtils { 
    static std::complex<double> cis(double x) { 
     return std::complex<double>(cos(x), sin(x)); 
    } 
    ... 
} 

pliki źródłowe, które zawierają ten nagłówek, ale nie należy używać tej konkretnej funkcji, wywołać ostrzeżenie.

Mogę dodać ostrzegawczą pragmę wokół funkcji wyłączania ostrzeżenia, ale to nie wydaje się być właściwą drogą - to wydaje się ogólny problem.

+0

Jakie są opcje kompilatora po uruchomieniu ostrzeżenia? Jakie są wersje xcode i clang? – osgx

+0

Zarówno Xcode 7/8. Istotne ostrzeżenie to Nieużywane funkcje. – Danra

+0

Danra, pełna komenda kompilatora z wszystkimi opcjami wiersza poleceń? (sprawdź pełny dziennik kompilacji - "Rozwiń wszystkie transkrypcje" - http://stackoverflow.com/questions/19014359/how-do-i-view-the-full-build-log-on-xcode5 - powinno być polecenie z klangiem) – osgx

Odpowiedz

5

Zmiana funkcji na static inline zamiast tylko static rozwiązuje problem.

+0

Zmieniłem metodę statyczną na statyczną, wbudowaną, ale nadal otrzymuję ostrzeżenie "nieużywana funkcja" w Xcode 9.1. –

3

Jeśli określisz lokalizację pliku o numerze -isystem zamiast -I, clang będzie cicho ignorować wszystkie ostrzeżenia w pliku nagłówkowym. Aby uzyskać więcej informacji, zobacz http://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-in-system-headers.

Aby to zrobić z XCode, o ile wiem, należy dodać odpowiednią flagę kompilatora do sekcji "Inne flagi C++" w Ustawieniach kompilacji.

Otrzymujesz również ostrzeżenia, ponieważ zdefiniowałeś funkcję z static - co oznacza, że ​​funkcja jest zdefiniowana osobno w każdej jednostce tłumaczeniowej, do której należy nagłówek, i nie jest widoczna dla żadnych innych jednostek. Możesz pozbyć się błędów, usuwając tylko słowo kluczowe static.

+0

Usunięcie statycznych powoduje błędy linkera w przypadku, gdy nagłówek jest zawarty w więcej niż jednym module. – Danra