Czy void jest typem danych w C?

Czy void jest typem danych w języku programowania C? Jeśli tak, to jakiego typu wartości może przechowywać? Jeśli mamy int, float, char, itd., do przechowywania wartości, dlaczego void jest potrzebne?

 44
Author: Jameson, 2010-08-15

3 answers

Void jest uważany za typ danych( dla celów organizacyjnych), ale jest to w zasadzie słowo kluczowe, które można użyć jako elementu zastępczego, w którym można umieścić typ danych, aby reprezentować "brak danych".

Stąd możesz zadeklarować procedurę, która nie zwraca wartości jako:

void MyRoutine();

Ale nie Można zadeklarować zmiennej w ten sposób:

void bad_variable;

Jednak, gdy jest używany jako wskaźnik, wtedy ma inne znaczenie:

void* vague_pointer;

To deklaruje wskaźnik, ale bez określenia, który to typ danych / align = "left" /

 72
Author: James Curran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 19:47:40

Tak, void jest typem. To, czy jest to typ data zależy od tego, jak zdefiniujesz ten termin; standard C nie.

Standard definiuje termin "typ obiektu". W C99 i wcześniejszych; void nie jest typem obiektu; w C11 jest. We wszystkich wersjach standardu void jest typem niekompletnym. Co zmieniło się w C11 jest to, że niekompletne typy są teraz podzbiorem typów obiektów; jest to tylko zmiana w terminologii. (Innym rodzajem typu jest funkcja typ .)

C99 6.2.6 paragraf 19 mówi:

Typ void zawiera pusty zbiór wartości; jest niekompletny wpisz, którego nie można uzupełnić.

Norma C11 zmienia nieco sformułowanie:

Typ void zawiera pusty zestaw wartości; jest to niekompletny typ obiektu, który nie można go ukończyć.

Odzwierciedla to zmianę definicji "typu obiektu" C11 na niekompletny typy; tak naprawdę nic nie zmienia w naturze typu void.

Słowo kluczowe void może być również używane w innych kontekstach:

  • Jako jedyny typ parametru w prototypie funkcji, jak w int func(void), wskazuje on, że funkcja nie ma parametrów. (C++ używa do tego pustych nawiasów, ale znaczą coś innego w C.)

  • Jako typ zwracany funkcji, jak w void func(int n), oznacza to, że funkcja zwraca no wynik.

  • void* jest typem wskaźnika, który nie określa, do czego wskazuje.

Zasadniczo wszystkie te zastosowania odnoszą się do typu void, ale możesz również myśleć o nich jako o specjalnej składni, która zdarza się używać tego samego słowa kluczowego.

 21
Author: Keith Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 20:21:43

Standard C mówi, że void jest typem niekompletnym, którego nie można ukończyć (w przeciwieństwie do innych niekompletnych typów, które można ukończyć). Oznacza to, że nie można zastosować operatora sizeof do void, ale można mieć wskaźnik do typu niekompletnego.

 5
Author: Jens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 21:21:27