Pusty typ danych

Pusty typ danych (ang. void type) – typ danych, którego zmienna niesie zerową informację, czyli, zgodnie z teorią informacji, matematyczna klasa wszystkich wartości zmiennych tego typu zawiera dokładnie jeden element. Wprowadzenie takiego typu do systemu typów języka programowania umożliwia pewne rodzaje uogólnień - nie trzeba rozróżniać funkcji, które zwracają wartość, od tych, które jej nie zwracają (czyli zwracają wartość typu pustego), oraz funkcji, które pobierają jakiś argument, od tych, które tego nie robią.

Typ pusty stosowany jest głównie do:

Typy puste w językach programowania

Przykłady

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.

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.

W języku C++ taka konstrukcja także jest dopuszczalna. Jednak taki sam rezultat da pozostawienie nawiasu pustego − w języku C oznaczałoby to, że funkcja przyjmuje nieokreśloną liczbę argumentów.

Definiowanie wskaźników do danych nieokreślonego typu

int   n = 10;
void *p = &n;
int  *pn = (int *) p;
printf("n = %d\n", *pn);

W przykładzie tym zdefiniowano wskaźnik p i przypisano mu adres zmiennej całkowitej 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:

Przykład zaawansowany (qsort)

W standardowej bibliotece języka 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))

Uwagi

int
powitanie()
{
   printf("Witaj!\n");
   return 0;
}

Ta sama konstrukcja w języku C interpretowana jest jako definicja funkcji o nieokreślonej (dowolnej) liczbie argumentów.