Could you explain me a little the line: typedef void (*voidFuncPtr)(void);
It looks particularly weird because C typedefs look like variable declarations, and pointers to functions have the name ("voidFuncPtr", here) in the middle of a bunch of punctuation instead of off as a nice separated token the way it would be for a more common type:
typedef struct foo foo_type;
It would make more sense as something like:
typedef void (*)(void) voidFuncPtr;
but that's not the way C works. Read it as:
"define a type voidFuncPtr as a pointer to a function with no arguments that returns void"