@shirleyquirk Sorry, but I have a followup question related to C as I am trying to translate that to Nim.
In that C example, I see typedef struct t_vpi_systf_data { PLI_INT32 type; // vpiSysTask, vpiSysFunc PLI_INT32 sysfunctype; // vpiSysTask, vpi[Int,Real,Time,Sized, SizedSigned]Func PLI_BYTE8 *tfname; // First character must be `$' PLI_INT32 (*calltf)(PLI_BYTE8 *); PLI_INT32 (*compiletf)(PLI_BYTE8 *); PLI_INT32 (*sizetf)(PLI_BYTE8 *); // For sized function callbacks only PLI_BYTE8 *user_data; } s_vpi_systf_data, *p_vpi_systf_data; Run If we focus on `PLI_INT32 (*calltf)(PLI_BYTE8 *);` bit, that's a pointer to a function accepting a char array pointer (cstring) and returning an int, right? But then I see this: void hello() { vpi_printf("\n\nHello!!\n\n"); } void registerHelloSystfs() { s_vpi_systf_data task_data_s; p_vpi_systf_data task_data_p = &task_data_s; task_data_p->type = vpiSysTask; task_data_p->tfname = "$hello"; task_data_p->calltf = hello; task_data_p->compiletf = 0; vpi_register_systf(task_data_p); } Run ... `task_data_p->calltf = hello;` Here, `hello` is not a function that's accepting a cstring. The whole example actually runs fine in C, so I am confused why.