Имеет ли следующий код c11? Я проверил стандарт, и он кажется неподдерживаемым, но я могу что-то упустить. Этот пример немного надуман, но моя фактическая ситуация включает в себя тысячу строк кода и не имеет большого смысла без всего этого контекста, и этот пример правильно изолирует принципала, о котором я хочу спросить. Дело в том, что я использую собственный адрес функции, используя свой идентификатор.Может ли функция использовать свой собственный адрес в c11?
typedef void(*ftype)(void*,void*);
void func(void* v, void* w)
{
if(func != (ftype)v) ((ftype)v)(((void**)w)[0], ((void**)w)[1]));
}
Таким образом, идея заключается в том, чтобы запустить функцию, на которую указывает V-за его побочных эффектов, с его входной задается массив, на который указывает ш. Однако желательно не запускать v, если это будет ссылка на функцию func.
EDIT: Комментарий ответил на вопрос: «Прямой вызов функции подразумевает неявное преобразование (« распад ») из имени функции в указатель на функцию.
Возможный дубликат [C cast void pointer to function pointer] (http://stackoverflow.com/questions/13696918/c-cast-void-pointer-to-function-pointer) – Axalo
Как это дубликат этого вопрос? Я действительно не вижу никакой связи. – jack
Не могли бы вы заменить тело функции 'ftype f = func;' и получить тот же вопрос? – immibis