C Languagetypedef


introduzione

Il meccanismo typedef consente la creazione di alias per altri tipi. Non crea nuovi tipi. Le persone usano spesso typedef per migliorare la portabilità del codice, per fornire alias per i tipi di struttura o unione, o per creare alias per i tipi di funzione (o puntatore di funzione).

Nello standard C, typedef è classificato come "classe di memoria" per comodità; si verifica sintatticamente dove potrebbero apparire classi di memoria come static o extern .

Sintassi

  • typedef nome_esistente nome_alias;

Osservazioni


Svantaggi di Typedef

typedef potrebbe portare all'inquinamento del namespace nei grandi programmi in C.

Svantaggi di Typedef Structs

Inoltre, le strutture typedef senza un nome di tag sono una delle cause principali di imposizione inutile delle relazioni di ordinamento tra i file di intestazione.

Tenere conto:

#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 tale definizione, non usando typedefs , è possibile che un'unità di compilazione includa foo.h per ottenere la definizione FOO_DEF . Se non tenta di dereferenziare il membro della bar della struttura foo non sarà necessario includere il file bar.h

Typedef vs #define

#define è una direttiva per il pre-processore C che viene anche utilizzata per definire gli alias per vari tipi di dati simili a typedef ma con le seguenti differenze:

  • typedef è limitato a dare nomi simbolici a tipi solo dove come #define può essere usato per definire alias anche per valori.

  • typedef interpretazione typedef viene eseguita dal compilatore mentre le istruzioni #define vengono elaborate dal pre-processore.

  • Si noti che #define cptr char * seguito da cptr a, b; non fa lo stesso di typedef char *cptr; seguito da cptr a, b; . Con il #define , b è un semplice char variabile, ma è anche un puntatore con il typedef .

typedef Esempi correlati