Compartir vía


Especificadores de tipos de C

Los especificadores de tipo en las declaraciones definen el tipo de una declaración de variable o de función.

Sintaxis

type-specifier: voidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-name

Los tipos signed char, signed int, signed short int y signed long int, junto con sus homólogos unsigned y enum, se denominan tipos enteros. Los especificadores de tipo float, double y long double se conocen como tipos flotantes o de punto flotante. Se puede utilizar cualquier especificador de tipo entero o de punto flotante en una declaración de variable o de función. Originalmente, si type-specifier no se proporcionaba en una declaración, se tomaba como int. El compilador de Microsoft ya no acepta declaraciones int predeterminadas.

Las palabras clave opcionales signed y unsigned pueden ir precedidas o seguidas de cualquiera de los tipos integrales, excepto enum y también se pueden utilizar solas como especificadores de tipo, en cuyo caso se entienden como signed int y unsigned int, respectivamente. Cuando la palabra clave int se usa sola, se da por supuesto que es signed . Cuando las palabras clave long y short se utilizan solas, se entienden como long int y short int.

Los tipos de enumeración se consideran tipos básicos. Los especificadores para los tipos de enumeración se describen en Declaraciones de enumeración.

La palabra clave void tiene tres usos: especificar un tipo de valor devuelto de función, especificar una lista de tipos de argumento para una función que no toma ningún argumento y especificar un puntero a un tipo sin especificar. El tipo void se puede utilizar para declarar funciones que no devuelven ningún valor o para declarar un puntero a un tipo sin especificar. Vea Argumentosvoid para obtener información sobre el tipo cuando aparece solo entre paréntesis después de un nombre de función.

Específicos de Microsoft

La comprobación de tipos es ahora compatible con ANSI, lo que significa que short y int son tipos distintos. Por ejemplo, en esta muestra se puede ver una nueva definición en el compilador de Microsoft C que se aceptaba en versiones anteriores del compilador.

int   myfunc();
short myfunc();

En el ejemplo siguiente también se genera una advertencia sobre el direccionamiento indirecto a tipos diferentes:

int *pi;
short *ps;

ps = pi;  /* Now generates warning */

El compilador de Microsoft C también genera advertencias para las diferencias de signo. Por ejemplo:

signed int *pi;
unsigned int *pu;

pi = pu;  /* Now generates warning */

Las expresiones de tipo void se evalúan para ver si tienen efectos secundarios. No se puede utilizar el valor (inexistente) de una expresión que tiene el tipo void de ninguna forma, ni puede convertirse una expresión void (mediante conversión implícita o explícita) a ningún tipo, excepto void. Si utiliza una expresión de cualquier otro tipo en un contexto donde se requiere una expresión void, se descarta el valor.

Por conformidad con la especificación ANSI, void** no se puede utilizar como int**. Solo void* se puede utilizar como puntero a un tipo sin especificar.

FIN de Específicos de Microsoft

Se pueden crear más especificadores de tipo con declaraciones typedef, como se describe en Declaraciones typedef. Vea Almacenamiento de tipos básicos para obtener información sobre el tamaño de cada tipo.

Vea también

Declaraciones y tipos
typeof, __typeof__ (C23)
typeof_unqual, __typeof_unqual__ (C23)