2017-09-20 27 views
6

Z tytułu może nie być jasne. Natknąłem się na następujący kod w osadzonym projekcie STM32. Nie rozumiem linii wewnątrz funkcji.Co oznacza to stwierdzenie w C: "(void) ptr;"

static void txend1(UARTDriver *uartp) { 
     (void)uartp; // what does this do? Is it a statement? 
    } 

Próbowałem wyszukiwać gdzie indziej w Internecie, ale większość wyników rzucają wskaźniki, aby nie wyświetlać wskaźników, co moim zdaniem nie jest. Dzięki za pomoc!

+3

to znaczy „nie mów mi, że piszę zły kod, I * * nie przeznaczone do używania argument". Kompilatory C są nieco analne i generują ostrzeżenie. Często odpowiednio, ale po prostu nie tutaj. Nie chciał robić nic specjalnego na końcu transmisji, co nie było niczym niezwykłym. Wskaźnik funkcji nie był jego wyborem. –

+0

@HansPassant Może to być spowodowane przez wymuszony interfejs API pochodzący od strony zewnętrznej i/lub w celu zachowania jednolitości - na przykład może istnieć alternatywna implementacja wykorzystująca wskaźnik. – SomeWittyUsername

+0

Tak, to oznacza "wskaźnik funkcji nie był jego wyborem". –

Odpowiedz

12

to tylko portable way to suppress the warning dla tego nieużywanego parametru uart.

Nie ma to żadnego skutku, ale kompilatory widzą, że są używane, i nie wysyłają żadnego ostrzeżenia.

Bardzo przydatne, gdy prototyp funkcji jest narzucony/nie można go zmienić (funkcja wywołania zwrotnego), ale implementacja nie wymaga tego parametru.

(zauważ, że gcc sprzyja __attribute__((unused)) budowy, łatwiej zrozumieć, ale nie kompatybilne ze wszystkimi kompilatorów)

+0

Hm ... er..Dlaczego nie powiesz kompilatorowi, aby nie ostrzegał zamiast kodowania bzdur? – savram

+2

ponieważ chcesz ostrzeżenia o miejscach, w których nie byłeś tego świadomy, to w jaki sposób zapobiegasz temu w miejscach, w których się znajdujesz. Niektóre kompilatory mają pragmę lub dyrektywę, ale gcc i inne pozwolą ci po prostu zrobić x = x; lub może jak w tym przypadku x; –

+2

@savram Możesz chcieć ostrzec o innych nieużywanych zmiennych. – Gam