Сегодня я бродил по теме указателей на функции, и в моей голове появился следующий сценарий:
__stdcall int function (int)
{
return 0;
}
int main()
{
(*(int(*)(char*,char*))function)("thought", "experiment");
return 0;
}
AFAIK этот код может повредить стек, так что за проблемы, на которые я мог бы обратить внимание при запуске этого кода?
Я бы проверил это сам, однако я на неделю отошел от своей машины.
РЕДАКТИРОВАТЬ: Подожди секунду, я думал немного больше. Как было отмечено в комментариях, целью этого кода было оставить параметр в стеке, когда все сказано и сделано (вызывающая сторона помещает в стек два параметра, вызываемая - ожидая только один параметр - выдает только один параметр) ). Однако, так как мой актер не упоминает соглашение о вызовах, я отбрасываю стандартный вызов, по крайней мере, с точки зрения вызывающего абонента? int function (int) по-прежнему выталкивает параметр из стека, но вызывает ли вызывающая сторона мысль, что функция __cdecl (по умолчанию) из-за приведения? (т. е. три общих параметра выскочили?)
РЕДАКТИРОВАТЬ 2: Ответ на этот второй вопрос, как подтвердил Роб, да. Я должен был бы повторить __stdcall, если бы я хотел оставить параметр в стеке:
(*(__stdcall int(*)(char*,char*))function)("thought", "experiment");