musím říct, že jsem byl skálopevně přesvědčen, že ze syntaxe céčka znám vše podstatné.
Nechť vznikne struktura, v které je pointer na funkci, třeba nějáký callback. V téhle funkci chci mít k dispozici data z této struktury a tak si jí předám jako parametr, resp. pointer na ní.
#include <stdio.h>
#include <stdlib.h>
struct tMYSTRUCTURE;
typedef struct{
int myint;
void (* pCallback)(struct tMYSTRUCTURE *mystructure);
}tMYSTRUCTURE;
Žádná velká věda, definujme ještě nějákou tu funkci.. void myCallback(struct tMYSTRUCTURE *mystructure){
puts("!!!Hello World!!!");
}a konečně vytvořme strukturu a zavolejme callback.. int main(void) {
//vytvoření struktury
tMYSTRUCTURE mystruct;
//přirazení funkce
mystruct.pCallback = myCallback;
//zavolání funkce
mystruct.pCallback(&mystruct);
return EXIT_SUCCESS;
}
..\src\retyping.c:31:5: warning: passing argument 1 of 'mystruct.pCallback' from incompatible pointer type
..\src\retyping.c:31:5: note: expected 'struct tMYSTRUCTURE *' but argument is of type 'struct tMYSTRUCTURE *'
Marně jsem vzpomínal na Herouta a na pojmy název struktury a název typu. Snad vždy jsem si vystačil s konstrukcí
typedef struct{
..
..
}tSTRUCT
Až s pomocí stackoverflow jsem dal dohromady řešení, které překladač přechroustá bez reptání.
Žádné komentáře:
Okomentovat