Я смотрел на некоторый код, подобный тому, что упоминался здесь: Указатели на функции для функций winapi (stdcall / cdecl), Указатель на функцию и соглашение о вызовах, и т.п.
Что нужно, выгода для объявления типа вызова указателя функции как __stdcall
?
Зачем вообще объявлять вызывающий тип для указателя на функцию?
Внедрение спецификатора соглашения о вызове в указатель функции позволяет использовать это соглашение о вызове при вызове функций через этот указатель. __stdcall это соглашение о вызовах, используемое для вызова функций Win32 API.
Преимущество указания его в указателе функции заключается в возможности соответствия другому соглашению о вызовах в соответствии с потребностями вашего кода (например, при загрузке функции внешней библиотеки через позднее связывание). Заголовки библиотек должны указывать их как хорошую практику программирования.
Однако есть предостережение: если вы вставите неправильное соглашение о вызовах в указатель на функцию, компилятор может оказаться бессильным помочь вам обнаружить это, и вы можете в конечном итоге делать плохие вещи во время выполнения.