Powodem posiadania nieużywanych parametrów w prototypie jest zwykle to, że funkcja musi być zgodna z jakimś zewnętrznym API - być może jest to funkcja biblioteczna lub wskaźnik do tej funkcji jest przekazywany do innej funkcji, która oczekuje takiej konwencji wywoływania. Jednak nie wszystkie argumenty używane przez konwencję wywoływania są w rzeczywistości potrzebne w samej funkcji.
Powodem podania nazwy parametru w treści jest uniknięcie ostrzeżeń, takich jak
unused.c: In function ‘l_alloc’:
unused.c:3:22: warning: unused parameter ‘ud’ [-Wunused-parameter]
void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
^~
To ostrzeżenie można wyeliminować, używając rzeczywistego parametru w treści funkcji. Na przykład, jeśli masz następujące oświadczenie:
ud;
To ostrzeżenie jest teraz zniesione. Jednak teraz GCC wyświetli kolejne ostrzeżenie:
unused.c:5:5: warning: statement with no effect [-Wunused-value]
ud;
^~
To ostrzeżenie mówi, że instrukcja ud;
, chociaż jest poprawna składniowo w C, w ogóle nie wpływa na nic i prawdopodobnie jest błędem, podobnie jak instrukcja
abort;
które być może powinno być napisane jako abort();
zamiast tego, żeby coś zrobiło.
I w tym miejscu (void)
pojawia się rzutowanie - powie kompilatorowi jednoznacznie i wyraźnie, że instrukcja ma absolutnie nie mieć żadnego efektu.