W C voidjest używany do wielu niepowiązanych rzeczy. W zależności od tego, do czego jest używany, może to oznaczać typ jednostki, typ pusty lub coś innego.
Gdy voidjest używany samodzielnie (w przeciwieństwie do void*wskaźnika do pustki), jest to typ jednostki, tj. Typ z jedną wartością. voidMówi się, że funkcje, które zwracają , „nic nie zwracają”, ale tak naprawdę oznacza to, że nie zwracają żadnych informacji. Zwracają bitów informacji, co oznacza, że zwracają wartość typu, który zawiera odrębne wartości, tj. Typ jednostki.020=1
To nie jest pusty typ: funkcja zwracająca pusty typ nie może zwrócić wartości, ponieważ nie ma żadnej wartości tego typu. Funkcja, której typ zwracany jest pusty, może zapętlać na zawsze, przerywać program lub zgłaszać wyjątek ( longjmp) (lub w inny sposób zapewniać brak powrotu, np. Poprzez przeniesienie kontroli do innego wątku lub procesu przy użyciu funkcjonalności wykraczającej poza standardowy C). Aby utrzymać zamieszanie, w C zwykle używa się voidzamiast pustego typu (C nie ma pustego typu).
voidTen wymaga bitów przechowywania. Ponieważ C nalega, aby każdy obiekt zajmował całą niezerową liczbę bajtów pamięci, zabronione jest tworzenie obiektu typu i istnieje specjalna składnia zwracająca wartość ( instrukcja z pominiętą wartością). Nie ma składni, która daje wartość typu , ale ta wartość jest dostępna za każdym razem, gdy zwraca funkcję, której typ zwracany jest .0voidvoidreturnvoidvoid
C nie ma typu dolnego w tym sensie, że dopuszcza dowolny możliwy typ. Nawet niekompletne typy określają ogólny charakter jego wartości, np. Wskaźniki, struktury, związki lub funkcje. Ale void*jest wskaźnikiem do każdego typu non-funkcyjny: to najmniejszy element algebry typów obiektów wskaźnik, czyli jest to dolna typ obiektu wskaźnik. W przeciwieństwie do ogólnego przypadku T*, gdzie Tjest jakiś zakaz typ void, void*nie jest typem wskaźników do wartości typu void, ale rodzaj wskaźników do wartości nieokreślonego typu.