Код
Module.h
typedef struct module_data {
int in, pastIn ,result; // Persistent data, coefficients etc.
void (*calc)() // Pointer to calculation function
} MODULE;
#define MODULE_DEFAULTS { 0,0,0, (void (*)(Uint32))module_calc }
Module.c
void module_calc(MODULE *p)
{
// compute code
p->result = p->pastIn+p->In;
p->pastIn = p->In;
}
typedef struct module_data {
int in, pastIn ,result; // Persistent data, coefficients etc.
void (*calc)() // Pointer to calculation function
} MODULE;
#define MODULE_DEFAULTS { 0,0,0, (void (*)(Uint32))module_calc }
Module.c
void module_calc(MODULE *p)
{
// compute code
p->result = p->pastIn+p->In;
p->pastIn = p->In;
}
Код
Client.c
MODULE mod = MODULE_DEFAULTS;
void somefunc(void)
{
int foo;
mod.in = 10; // coefficient configuration
mod.calc(&mod);
foo = mod.result; // Use result
}
MODULE mod = MODULE_DEFAULTS;
void somefunc(void)
{
int foo;
mod.in = 10; // coefficient configuration
mod.calc(&mod);
foo = mod.result; // Use result
}
Спрашивается по какой логике работает компилятор когда указателю типа
void (*calc)()
присваевается
(void (*)(Uint32))module_calc ?
И вообще как можно человеческим языком описать конструкцию:
(void (*)(Uint32))module_calc ?