C LanguageTypedef


Introducción

El mecanismo typedef permite la creación de alias para otros tipos. No crea nuevos tipos. Las personas a menudo usan typedef para mejorar la portabilidad del código, para dar alias a los tipos de estructura o unión, o para crear alias para los tipos de función (o puntero de función).

En el estándar C, typedef se clasifica como una 'clase de almacenamiento' por conveniencia; se produce de forma sintáctica donde pueden aparecer clases de almacenamiento, como static o extern .

Sintaxis

  • typedef existing_name alias_name;

Observaciones


Desventajas de Typedef

typedef podría conducir a la contaminación del espacio de nombres en grandes programas de C.

Desventajas de las estructuras Typedef

Además, las estructuras typedef sin un nombre de etiqueta son una causa importante de la imposición innecesaria de relaciones de ordenación entre archivos de encabezado.

Considerar:

#ifndef FOO_H
#define FOO_H 1

#define FOO_DEF (0xDEADBABE)

struct bar; /* forward declaration, defined in bar.h*/

struct foo {
    struct bar *bar;
};

#endif

Con tal definición, sin usar typedefs , es posible que una unidad de compilación incluya foo.h para obtener la definición FOO_DEF . Si no intenta eliminar la referencia al miembro de la bar de la estructura foo entonces no habrá necesidad de incluir el archivo bar.h

Typedef vs #define

#define es una directiva de preprocesador C que también se utiliza para definir los alias para varios tipos de datos similares a typedef pero con las siguientes diferencias:

  • typedef se limita a dar nombres simbólicos a tipos solo cuando como #define se puede usar para definir alias para valores también.

  • typedef interpretación typedef es realizada por el compilador mientras que las instrucciones #define son procesadas por el preprocesador.

  • Tenga en cuenta que #define cptr char * seguido de cptr a, b; no hace lo mismo que typedef char *cptr; seguido de cptr a, b; . Con #define , b es una variable de char simple, pero también es un puntero con el typedef .

Typedef Ejemplos relacionados