Void
Z Wikipedii
Void jest to słowo kluczowe używane w języku programowania C oraz jego pochodnych (m.in. Java, Javascript, C++ i C#). Stosowane jest głównie do
- Wskazania, że funkcja nie zwraca wyniku (języki C, C++).
- Wskazania, że funkcja nie pobiera żadnych argumentów (język C)
- Definiowania wskaźników na dane nieokreślonego typu (języki C i C++).
Spis treści |
[edytuj] Przykłady
[edytuj] Definiowanie funkcji niezwracającej wyniku
void wypisz_liczbe(int liczba) { printf("%d\n", liczba); }
W przykładzie tym (napisanym w języku C lub C++) słowo kluczowe void
wskazuje, że funkcja wypisz_liczbe
nie zwraca wartości.
[edytuj] Definiowanie funkcji bezargumentowych
int powitanie(void) { printf("Witaj!\n"); return 0; }
W przykładzie tym (napisanym w języku C) słowo kluczowe void
wskazuje, że funkcja powitanie
nie pobiera żadnych argumentów.
[edytuj] Definiowanie wskaźników do danych nieokreślonego typu
int n = 10; void* p = &n;
W przykładzie tym zdefiniowano wskaźnik p
i przypisano mu adres zmiennej całkowiej n
. Ponieważ kompilator nie ma żadnej informacji o typie danych wskazywanych przez p
, nie wolno bezpośrednio wyłuskiwać danych wskazywanych przez p
. Aby uzyskać dostęp do tych danych, należy jawnie wskazać ich typ:
int* pn = (int*) p; printf("n = %d\n", *pn);
[edytuj] Przykład zaawansowany (qsort)
W języku C występuje funkcja sortujaca qsort
o następującym prototypie:
void qsort (void *array, size_t count, size_t size, int (*compare_fun) (const void *a, const void *b))
- Ponieważ funkcja ta nie musi zwracać wyniku, typem jej wartości jest
void
- Ponieważ funkcji tej chcielibyśmy móc używać do sortowania tablic danych dowolnego, z góry nieznanego typu, dostęp do nich zapewniany jest przez wskaźnik
array
typuvoid*
. - Czwarty argument funkcji
qsort
sam jest funkcją i służy do ustalania kolejności sortowanych elementów. Typem obu argumentów tej funkcji też jestvoid*
, dzięki czemu może ona zostać użyta do sortowania tablic dowolnego typu
[edytuj] Uwagi
- Co prawda w języku C++ można posługiwać się wskaźnikami typu
void*
, jednak w praktyce z możliwości tej korzysta się tylko w kodzie współpracującym z bibliotekami napisanymi w C. W C++ istnieją bowiem bezpieczne mechanizmy praktycznie eliminujące potrzebę posługiwania się typemvoid*
: polimorfizm i typy parametryczne. - W C++ do definiowania funkcji bezargumentowych nie używa się słowa kluczowego
void
, lecz po prostu pozostawia się pustą listę argumentów.
int powitanie() { printf("Witaj!\n"); return 0; }
Ta sama konstrukcja w języku C interpretowana jest jako definicja funkcji o niekreślonej (=dowolnej) liczbie argumentów.