Mam następującą deklarację w pliku nagłówka:typedef z dodatkowym efektem ubocznym deklaracji?
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
bez deklaracji przodu, kompilator będzie oczywiście dać this error:
error: 'struct my_struct' declared inside parameter list
Jednakże, jeśli zastąpi Prześlij deklarację my_struct
z typedef i zaktualizuj odpowiednio deklarację funkcji, to compiles fine:
typedef struct my_struct my_struct_t;
int func(mystruct_t* s); // Passing my_struct_t*
Co ciekawe, jeśli trzymam typedef, ale używać oryginalnego oświadczenia my_struct
, to also compiles:
typedef struct my_struct my_struct_t;
int func(struct my_struct* s); // Passing struct my_struct*
Czy ktokolwiek zauważy, że? Czy to zachowanie jest efektem ubocznym?
Typedef działa również jako deklaracja do przodu, przenosi nazwę typu do zakresu. –
@ DanielFischer Tak, zauważyłem, że :) ale nie mogłem znaleźć niczego w standardowym stwierdzeniu, że. Przegapiłem coś? –
Nie ma potrzeby deklaracji przekazania do utworzenia wskaźnika do struktury. To tylko konwencja. Czy się mylę? –