in C (ANSI, C99, ecc.), le strutture vivono nel proprio spazio dei nomi. Una struttura per un elenco collegato potrebbe essere simile a questa:
struct my_buffer_type {
struct my_buffer_type * next;
struct my_buffer_type * prev;
void * data;
};
Sembra abbastanza naturale, tuttavia, che la maggior parte dei programmatori C digiti automaticamente quelle strutture come la seguente
typedef struct tag_buffer_type {
struct tag_buffer_type * next;
struct tag_buffer_type * prev;
void * data;
} my_buffer_type;
E quindi fai riferimento alla struttura come un tipo normale, cioè get_next_element(my_buffer_type * ptr)
.
Ora la mia domanda è: c'è una ragione specifica per questo?
Wikipedia dice link
Some people are opposed to the extensive use of typedefs. Most arguments center on the idea that typedefs simply hide the actual data type of a variable. For example, Greg Kroah-Hartman, a Linux kernel hacker and documenter, discourages their use for anything except function prototype declarations. He argues that this practice not only unnecessarily obfuscates code, it can also cause programmers to accidentally misuse large structures thinking them to be simple types.[4]
Others argue that the use of typedefs can make code easier to maintain. K&R states that there are two reasons for using a typedef. First, it provides a means to make a program more portable. Instead of having to change a type everywhere it appears throughout the program's source files, only a single typedef statement needs to be changed. Second, a typedef can make a complex declaration easier to understand.
Personalmente mi chiedo se non ci sia abbastanza vantaggio di avere lo spazio dei nomi struct
separato a volte non usare le strutture typedef e dato che ci sono diverse culture di programmazione C in giro (la programmazione di Windows C ha tradizioni diverse dalla programmazione di Linux C nel mio esperienza) se ci sono altre tradizioni di cui non sono a conoscenza.
Quindi sono interessato alle considerazioni storiche (predecessori, prime versioni di C).