C++函数类型?

Cod*_*ith 11 c++ function

我是新手,学习C++(知道很多Java),以下代码让我感到困惑......

在此输入图像描述

我知道这个代码片段正在处理指向函数的指针(它是一个回调,这是有道理的)但是什么让我失望的是返回类型和函数名之间的参数.这到底是什么血腥的?

它看起来像一种函数,但我从来没有听说过,甚至在搜索和读取指向函数的指针后,我也无法找到任何提及函数可能有类型的东西.

如果是这样,那么如何定义函数类型?

谢谢,-Cody

Igo*_*sky 10

GLFWCALL它不是一个类型,它是一个扩展为特定于平台的调用约定的宏,或一个空字符串.这是glfw.h的修剪片段:

#if defined(_WIN32) && defined(GLFW_BUILD_DLL)
 #define GLFWCALL     __stdcall
#elif defined(_WIN32) && defined(GLFW_DLL)
 #define GLFWCALL     __stdcall
#else
 /* We are either building/calling a static lib or we are non-win32 */
 #define GLFWCALL
#endif
Run Code Online (Sandbox Code Playgroud)

在x86/win32上使用正确的调用约定非常重要,因为有些调用约会希望调用者可以通过被调用者清理堆栈.传递参数的顺序也可能存在差异.

  • @CodySmith:除了Windows世界之外,人们很少会打扰调用约定.也不要打扰(现在).至于学习集会......这是另一项努力.专注于你当前的任务,并在你完成时寻找另一个任务,否则你将无处可去. (4认同)

Bil*_*nch 9

在Windows上,GLFWCALL是一个宏__stdcall,在其他平台上,它是一个宏,没有任何东西.

__stdcall 实现特定的调用约定,并且是普通C或C++之上的编译器扩展.

宏是在编译器的词法分析器和解析器与它们交互之前替换代码的代码片段.


Dav*_*rtz 6

GLFWCALL是可以扩展到宏调用约定如果需要一个.因为这个函数将被外部代码调用,所以它必须使用外部代码所期望的调用约定.例如,如果函数将其返回值放在堆栈上,而外部代码将它放在寄存器中,则繁荣.