Hi,

Am 17.12.2010 um 10:47 schrieb Stefano Bonifazi:

I've got an explanation from a C guru :)

((long REGPARM (*)(void *))code_gen_prologue)(tb_ptr)
---------
(long REGPARM (*)(void *)) is a type: a pointer pointing to a function, which takes one (void*) parameter. code_gen_prologue is an>array, array's name when used is considered to be a pointer to its first element, thus you are casting here pointer to the first byte of>array to pointer to function (...). Ellipsis with tb_ptr mean 'call function under this address and pass there whatever tb_ptr is'

Now everything is very clear for me :)
I do know pointer to functions, and if I had got:

long REGPARM (*myfunc)(void *)

I would have recognized it.. but removing the function pointer name, leaving only the * was enough for me to be lost :[

Feel free to take the next step then and read CODING_GUIDELINES to create and submit your first Git patch to make the code more readable for others. Introducing a typedef for the cast might not be a bad idea.

also the definition of code_gen_prologue was tricky:
uint8_t code_gen_prologue[1024] code_gen_section;
that code_gen_section at first confused my idea of a normal variable definition as "type identifier" .. until I found out it was a define for a compiler directive (alignment) :[

Would capitalizing code_gen_section have helped to recognize it as a preprocessor define? Another patch idea. :)

Regards,
Andreas

Reply via email to