Изучая отладку OpenGL, я реализовал функцию обратного вызова, которая будет получать любые сообщения об ошибках отладки из API OpenGL всякий раз, когда что-то пойдет не так. В учебнике сказано, что сигнатура функции:
typedef void APIENTRY funcname(GLenum source, GLenum type, GLuint id,
GLenum severity, GLsizei length, const GLchar* message, const void* userParam);
Итак, в Windows я реализовал этот обратный вызов. В Windows APIENTRY определяется для __stdcall. __stdcall Я полагаю, что это специфичное для Windows ключевое слово, определяющее соглашение о вызовах. Позже я перенес свой код на Linux, и для начала мой GCC с Eclipse не распознал APIENTRY, потому что это определение Windows. Поэтому я изменил его на __stdcall, который я не уверен, распознал он или нет, но, несмотря на это, выдал ошибку:
"Ожидаемый инициализатор перед glCheckError_"
Поскольку моя функция обратного вызова недействительна, __stdcall glCheckError_(/Params/). Удаление предисловия __stdcall позволяет программе нормально работать и без него.
Мне интересно, нужен ли этот префикс для Windows или Linux? Забавно то, что добавить __stdcall в сигнатуру функции предложили на веб-странице Khronos, содержащей документацию по OpenGL, поэтому, насколько я могу судить, на ней не следует указывать информацию, специфичную для ОС, поскольку OpenGL является кросс- Платформа. Так нужен ли мне этот префикс __stdcall?