Después de consultar con expertos en el tema, programadores de diversas ramas y maestros hemos dado con la respuesta al problema y la dejamos plasmada en este post.
Solución:
Básicamente significa “nada” o “ningún tipo”.
Hay 3 formas básicas que void se utiliza:
-
Argumento de la función:
int myFunc(void)
— la función no toma nada. -
Valor de retorno de la función:
void myFunc(int)
— la función no devuelve nada -
Puntero de datos genéricos:
void* data
— ‘datos’ es un puntero a datos de tipo desconocido, y no se puede desreferenciar
Nota la void
en un argumento de función es opcional en C++, por lo que int myFunc()
es exactamente igual que int myFunc(void)
, y se omite por completo en C#. Siempre es necesario para un valor de retorno.
Siempre lo he tomado en el sentido ausente. Aquí hay cuatro casos en el lenguaje C que coinciden con este uso de ausente
R f(void)
– Los parámetros de función son ausentevoid f(P)
– El valor devuelto es ausentevoid *p
– Tipo de lo que se apunta es ausente(void) p
– El uso del valor es ausente
Otros descendientes de C lo usan para otras cosas. los D
El lenguaje de programación lo usa para casos en los que se requiere un inicializador. ausente
T t = void;
– el valor de inicialización es ausente
Hay dos formas de usar void:
void foo(void);
o
void *bar(void*);
El primero indica que no se pasa ningún argumento o que no se devuelve ningún argumento.
El segundo le dice al compilador que no hay ningún tipo asociado con los datos, lo que significa que no puede hacer uso de los datos apuntados hasta que se conviertan en un tipo conocido.
por ejemplo verás void*
se usa mucho cuando tiene una interfaz que llama a una función cuyos parámetros no se pueden conocer con anticipación.
Por ejemplo, en el kernel de Linux, al diferir el trabajo, configurará una función para que se ejecute en un momento posterior dándole un puntero a la función que se ejecutará y un puntero a los datos que se pasarán a la función:
struct _deferred_work
sruct list_head mylist;
.worker_func = bar;
.data = somedata;
deferred_work;
Luego, un subproceso del kernel revisa una lista de trabajo diferido y cuando llega a este nodo, se ejecuta de manera efectiva:
bar(somedata);
Luego en barra tienes:
void bar(void* mydata)
int *data = mydata;
/* do something with data */;
Reseñas y valoraciones
Al final de todo puedes encontrar las ilustraciones de otros gestores de proyectos, tú además tienes el poder insertar el tuyo si lo crees conveniente.