Perché dovresti voler identificatori diversi per un typedef e il suo tag struct associato?

7

Ignorando (con difficoltà) il Rasoio di Occam che sembrerebbe metterlo rapidamente a riposo, quale vantaggio avrebbe questo:

typedef struct s_header {
    struct s_header *next;
    //...
} Header;

oltre questo:

typedef struct header {
    struct header *next;
    //...
} header;

Questa domanda si basa su un argomento che stavo vedendo nei commenti a questa risposta al codice . Il mio punto di vista è stato diluito anche segnalando un errore (che credo sarebbe più facile evitare usando lo stesso nome ovunque).

    
posta luser droog 17.02.2016 - 04:37
fonte

1 risposta

7

Compatibilità con i compilatori antichi, dove l'uso dello stesso nome ha causato una collisione di nomi:

Why is the structure name different from typedef name?

This is a holdover from very early versions of the C language where structure tags, union tags, and typedefs were kept in the same namespace. Consequently, you couldn’t say typedef struct XYZ { ... } XYZ;. At the open brace, the compiler registers XYZ as a structure tag name, and then when XYZ appears a second time, you get a redeclaration error. The standard workaround for this was to make the structure tag name a minor modification of the typedef name, most typically by putting the word tag in front.

The C language standardization process separated the structure and typename name spaces, so this workaround is no longer necessary,

(da Perché i nomi delle strutture sono diversi dai loro nomi typedef? The Old New Thing )

    
risposta data 17.02.2016 - 09:30
fonte

Leggi altre domande sui tag