¿Void es un tipo de datos en C?


Es void un tipo de datos en el lenguaje de programación C? Si es así, ¿qué tipo de valores puede almacenar? Si tenemos int, float, char, etc., para almacenar valores, ¿por qué se necesita void?

 44
Author: Jameson, 2010-08-15

3 answers

Void se considera un tipo de datos (para fines organizativos), pero es básicamente una palabra clave para usar como marcador de posición donde pondría un tipo de datos, para representar "sin datos".

Por lo tanto, puede declarar una rutina que no devuelve un valor como:

void MyRoutine();

Pero, no se puede declarar una variable como esta:

void bad_variable;

Sin embargo, cuando se usa como puntero, entonces tiene un significado diferente:

void* vague_pointer;

Esto declara un puntero, pero sin especificar qué tipo de datos es apuntando a.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-27 19:47:40

void es un tipo. Si se trata de un tipo data depende de cómo se defina ese término; el estándar C no lo hace.

El estándar define el término "tipo de objeto". En C99 y anteriores; void no es un tipo de objeto; en C11, lo es. En todas las versiones del estándar, voides un tipo incompleto. Lo que cambió en C11 es que los tipos incompletos ahora son un subconjunto de tipos de objetos; esto es solo un cambio en la terminología. (El otro tipo de tipo es una función tipo.)

C99 6.2.6 El párrafo 19 dice:

El tipo void comprende un conjunto vacío de valores; es un tipo que no se puede completar.

El estándar C11 cambia ligeramente la redacción:

El tipo void comprende un conjunto vacío de valores; es un tipo de objeto incompleto que no se puede completar.

Esto refleja el cambio de C11 en la definición de" tipo de objeto " para incluir incompleto tipos; realmente no cambia nada sobre la naturaleza del tipo void.

La palabra clave void también se puede usar en otros contextos:

  • Como el único tipo de parámetro en un prototipo de función, como en int func(void), indica que la función no tiene parámetros. (C++ usa paréntesis vacíos para esto, pero significan algo más en C.)

  • Como el tipo de retorno de una función, como en void func(int n), indica que la función no devuelve resultado.

  • void* es un tipo de puntero que no especifica a qué apunta.

En principio, todos estos usos se refieren al tipo void, pero también puedes pensar en ellos como una sintaxis especial que usa la misma palabra clave.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-27 20:21:43

El estándar C dice que void es un tipo incompleto que no se puede completar (a diferencia de otros tipos incompletos que se pueden completar). Esto significa que no puede aplicar el operador sizeof a void, pero puede tener un puntero a un tipo incompleto.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-27 21:21:27