In C, void represents the absence of a value. It appears in two function-prototype conventions: `void` as the parameter list means no arguments, while `void` as the return type means the function returns nothing usable. section 7.1
Two function-prototype uses
Read these declarations by separating syntax from meaning: `void main(void);` describes a function with no parameters, and `void swap_double(double *a, double *b);` describes a function whose result is absent. The prototype lets the compiler check calls against the declared parameter and return types. section 7.1
`void*` is different: it is a generic pointer to an existing object. Converting an object pointer to `void*` and back preserves the pointer value but removes the object's type information. Since a standalone `void` declaration cannot produce an object with a usable value, `void` variables should not be declared; `void*` should also be avoided when a typed pointer is available. section 12.4
