Ho la seguente dichiarazione in un file di intestazione:typedef con un effetto collaterale di dichiarazione diretta?
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
Senza la dichiarazione anticipata, il compilatore sarebbe ovviamente dare this error:
error: 'struct my_struct' declared inside parameter list
Tuttavia, se si sostituisce la inoltra la dichiarazione di my_struct
con un typedef e aggiorna la dichiarazione di funzione di conseguenza, è compiles fine:
typedef struct my_struct my_struct_t;
int func(mystruct_t* s); // Passing my_struct_t*
Curiosamente, se tengo il typedef, ma utilizzare la dichiarazione originale my_struct
, è also compiles:
typedef struct my_struct my_struct_t;
int func(struct my_struct* s); // Passing struct my_struct*
Ha fatto chiunque altro notato? Questo comportamento è un effetto collaterale?
Il typedef funge anche da dichiarazione diretta, porta il nome del tipo in ambito. –
@DanielFischer Sì, l'ho notato :) ma non sono riuscito a trovare nulla nello standard che lo affermasse. Ho dimenticato qualcosa? –
Non è necessaria una dichiarazione diretta per creare un puntatore a una struttura. È solo una convenzione. Ho sbagliato? –