tipos tabla rangos programacion primitivos lenguaje enteros derivados datos c types void

tabla - ¿Es vacío un tipo de datos en C?



tipos de datos primitivos en c (3)

El Estándar C dice que el 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.

¿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é es necesario void ?


Sí, el void es un tipo. Si se trata de un tipo de datos depende de cómo se defina ese término; el estándar C no.

El estándar define el término "tipo de objeto". En C99 y antes; void no es un tipo de objeto; en C11, lo es. En todas las versiones del estándar, el void es 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 un tipo de función ).

C99 6.2.6 párrafo 19 dice:

El tipo de vacío comprende un conjunto vacío de valores; es un tipo incompleto que no puede completarse.

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

El tipo de vacío 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 tipos incompletos; realmente no cambia nada sobre la naturaleza del tipo void .

La palabra clave void también se puede usar en algunos 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 ningún 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 puede considerarlos como una sintaxis especial que usa la misma palabra clave.


Void se considera un tipo de datos (para fines de organización), pero básicamente es una palabra clave para usar como un 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 puedes declarar una variable como esta:

void bad_variable;

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

void* vague_pointer;

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