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?
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" /
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.
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.
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