Архив рубрики ‘C’

void* как указатель на функцию, в ANSI C

Январь 9, 2007

Вчера узнал, что ANSI C не разрешает приводить void* к указателю на функцию, даже явно, например код:


void *(*screngine_init)(void);
screngine_init = dlsym(screngine_lib, “screngine_init”);
(*screngine_call)(void);

будет не корректным.
Существует два варианта, как справиться с этой задачей:

  1. Использовать функцию dlfunc заместо dlsym.
  2. Использовать union такого вида: union { void *ptr; void (*call)(void); }

(далее…)