(void)argument; - co to robi?

0

Witam,

W Keilu w każdej (?) funkcji w ichnich szablonach jest na początku deklaracja/wywołanie/??? wskaźników z parametrów. O takie coś:

__WEAK __NO_RETURN void osRtxIdleThread (void *argument) {
  (void)argument;

  for (;;) {}
}

czy tu:

// OS Error Callback function
__WEAK uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
  (void)object_id;
...

Czy ktoś wie za co odpowiada (void)argument bądź (void)object_id; w drugiej funkcji?
Wspomniane fragmenty są w całości dostępne tu: RTX_Config.c

Nie widzę żadnego wpływu tego kodu na cokolwiek; kompilator (v5 i v6) to olewa. To też oczywiście oznacza że wartość przekazana przez taki wskaźnik nie ma tu znaczenia.

Nic w sieci nie znalazłem; albo nie potrafię szukać albo wpisuje złe hasła. W każdym razie skończyły mi się pomysły.

0

Być może chodzi o przekazanie "paretnta" wywołującego funkcję. W przypadku gdy go nie ma funkcja zadziała tak samo jak w przypadku gdy jest ale np. w przypadku wyjątku lub błędu zachowanie już jest inne?
Kiedyś pisało się tak, że prawie zawsze przekazywało się obiekt wywołujący:

int a = osRtxErrorNotify (255, this );
0

https://stackoverflow.com/questions/34288844/what-does-casting-to-void-really-do#34289000

Dokładnie. Po wywaleniu faktycznie kompilator (v6) informuje że argument nie jest używany. Na to nie wpadłem.

Dzięki!

0

Przydaje się to czasem przy debugowaniu gdy zrzucasz sobie jawnie jakieś dane tylko żeby podejrzeć stan, ale nigdzie tych zmiennych nie używasz. Raz, że takie zmienne VisualStudio czasem potrafi wywalić mimo trybu debug a dwa, że niektóre systemy mają ustawione flagi by traktować ostrzeżenia jako błędy i wtedy blokuje to kompilacje.

0
lion137 napisał(a):

@dziobu: Czytałeś to:

https://stackoverflow.com/questions/34288844/what-does-casting-to-void-really-do#34289000
?

Żeby intencja była jasna niektórzy opakowują to makrem np Q_UNUSED, ale spokojnie to samo można osiągnąć za pomocą prostego szablonu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1